java - 比较 Java 中的枚举

标签 java enums

我有一个具有枚举类型的 DTO。我想测试 DTO 字段,但不知道该怎么做。

Class MyDto {
  public enum ExamResult { PASS, FAIL };
  private ExamResult result;
  ...
}

我正在尝试测试其他类中的结果字段

if(myDto.result.equals("PASS")) {
  //doSomething
} else {
  //doOtherthing
}

但是 .equals() 总是返回 false,即使它具有正确的值。所以不确定如何测试它。

最佳答案

比较相等性时,Enums 值的行为就好像它们是整数一样。因此,您应该使用 == 运算符。虽然 equals(ExamResult.PASS) 也可以正常工作,如评论中所述(但这并不经常使用)。

if(myDto.result == ExamResult.PASS) {
  //Do something
} else {
  //Do other thing
}

如果您只能访问 Enum 值的 String 表示形式,则可以使用此类代码:(但我不推荐)

if(myDto.result.getName().equals("PASS")) {
  //Do something
} else {
  //Do other thing
}

更多说明: Enum 值在编译时被赋予唯一的整数值。在 Java 语言中,保证枚举值的名称和编译时间编号是唯一的。您可以使用 ordinal() 方法获取 Enum 唯一编号。可以使用 values() 方法以数组表示形式获取枚举的值。可以使用 name() 方法以字符串表示形式获取 Enum 值的名称。

关于java - 比较 Java 中的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26854770/

相关文章:

java - 如何在 startup.bat 中设置多个 JAVA_OPTS 选项

java - 使用 Maven 时出现 NoClassDefError : SnakeYAML,

python - Flag 枚举中所有值的表示

c++ - 在 C++ 中前向声明枚举

java - 扔不工作

java - 使用launch4j和maven时不会创建.exe

java - 递归计算字符串java中的字符串

Java 验证作为参数传递的枚举值

swift - 枚举大小写隐藏内置类型名称

C# 重载枚举来存储值