当前位置: 首页 > 知识库问答 >
问题:

在Java中比较枚举和非枚举对象的最佳方法是什么?

师赤岩
2023-03-14

具有以下定义

public interface AnInt {
    int value();
}

public enum FirstTwo implements AnInt {
    ONE(() -> 1),
    TWO(() -> 2);
}

是否有一种方法可以正确执行比较以使用标准等式:

class AnotherOne implements AnInt {
    @Override
    int value() {
        return 1;
    }
}
ONE.equals(new AnotherOne()); // -> true

共有1个答案

夏侯兴怀
2023-03-14

给定java的equals()。lang.Enum(所有枚举类的父类)是final,您不能这样做。

一般来说,考虑到不同类的对象,尤其是如果这些类之间没有亲子关系,equal是一个等待发生的意外(除非经过精心设计)。我建议以不同的方式解决这个问题(例如,自定义比较方法,或为相等检查提供门面的包装类,一个<代码>比较器

 类似资料:
  • 因为枚举成员不是有序的,所以它们只支持通过标识(identity) 和相等性 (equality) 进行比较。下面来看看 == 和 is 的使用: #!/usr/bin/env python3 # -*- coding: UTF-8 -*- from enum import Enum class User(Enum): Twowater = 98 Liangdianshui

  • 问题内容: 有没有办法检查一个枚举值是否大于或等于另一个值? 我想检查错误级别是否为“错误或以上”。 问题答案: 所有Java枚举都实现可比较:http : //java.sun.com/javase/6/docs/api/java/lang/Enum.html 您也可以使用该方法将它们转换为s,然后比较就很简单了。

  • 实现后缀计算器,需要检查运算符的优先级是否低于另一个运算符。以下是我到目前为止所拥有的: 我尝试了许多不同的方法来检查传入的字符的优先级,但都没有用。有没有简单的方法来比较一个枚举的两个值?我需要创建一个循环吗?

  • 问题内容: 给出测试代码: 我想检查两个给定的枚举是否包含相同的值。 也许有更优雅的方式做到这一点? 问题答案: 建立一组名称: 为此(考虑将以上内容提取到方法中)。 然后:

  • 问题内容: 在SO问题上编写的内容基础上构建Java最佳单例实现 -即关于使用枚举创建单例-之间的区别/优点/缺点(省略构造函数) and then calling 和 and then calling 问题答案: 假设您要绑定到将使用给定对象的属性的对象-您可以非常轻松地传递Elvis.INSTANCE,但是您不能传递Elvis.class并期望它找到该属性(除非经过故意编码才能找到类的静态属性

  • 问题内容: 我正在阅读有关sqlalchemy的信息,并且看到了以下代码: 我应该在库中使用常量将“类型”设置为int吗?还是我应该使枚举成为枚举? 问题答案: SQLAlchemy从0.6开始具有Enum类型:http ://docs.sqlalchemy.org/en/latest/core/type_basics.html?highlight=enum#sqlalchemy.types.En