编辑:稍微修改了代码以使用实际的枚举,但我仍然看到我所指的问题。
我有一个以前从未见过的怪异场景,以下代码是在Java 6以及我认为之前构建的,但是我不确定,因为该代码是在2008年写的,因此我们没有办法知道该代码是在哪个Java版本上写的,基本上,将枚举值列表与单个枚举值进行比较,假设该列表最多只包含一个值,并且该比较在Java 6及更早版本上可以正常工作(我'不确定版本),但在Java 7中失败
我在网上查了一下,但是找不到任何相关信息,因此希望有人能澄清一下。这是重现我所指问题的示例-
修改后的代码-
public class TestEnum {
enum Color {
RED, GREEN, BLUE;
}
public static void main(String[] args) {
List<Color> enums = new ArrayList<Color>();
enums.add(Color.RED);
if (enums.equals(Color.RED)) {
System.out.println("Passed the conditional check!!!");
}
else {
System.out.println("Failed the conditional check!!!");
}
}
即使我的枚举值列表仅包含一个常量Color.RED,并且我正在使用equals to方法进行比较,为什么上面的条件检查仍然失败?上面提到的代码始终会打印“条件检查失败”。
答案 0 :(得分:2)
回答这个问题:
但是现在我看到即使列表包含枚举ActionEnum.NONE,比较也返回false。
不,不是。当该内部列表包含ActionEnum.NONE时,将返回true
并在此停止执行方法。
此方法返回false
的仅方法是:
getFormats()
返回一个空列表,或者getActionEnum()
检索)为空或不包含ActionEnum.NONE 现在,您可以将其重写为:
for (Format f : getFormats())
for (ActionEnum e : f.getActions())
if (e.getActionEnum == ActionEnum.NONE)
return true;
return false;
编辑:我的代码假设一个叫做ActionEnum的东西实际上是一个真正的枚举。但是因为不是这种情况,所以在这里==不会被e.equals()代替!
关于另一个更新:另一个答案是正确的:您当前的代码执行 someList。等于(somethingThatIsNotAList)。那将总是返回false。您需要enums.contains(someEnum)
来代替。
答案 1 :(得分:1)
您正在比较List和Enum等于总是返回false的情况。如果您使用包含而不是等于,则该条件将起作用。
if (enums.contains(ActionEnum.NONE)) {