我正在浏览一些现有的(和正在运行的)代码,并遇到了这样的一行:
if (someObject.getStatus() == SomeEnum.VALUE1.VALUE2) { ... }
SomeEnum是一个简单的枚举,如下所示:
public enum SomeEnum {
VALUE1,
VALUE2,
VALUE3,
...
}
private SomeEnum() {}
现在,上面的比较是做什么的?更确切地说,那里的两个枚举值的组合是什么?因为我认为这是完全错误的,所以我很惊讶没有看到任何警告或错误。但是,它编译并运行得很好。有人可以告诉我这会做什么吗?
答案 0 :(得分:5)
如果你使用像Eclipse这样的IDE,你应该得到一个警告,说明VALUE2
应该以静态方式访问。使用javac -Xlint:all
,您也会收到警告。除此之外,SomeEnum.VALUE1.VALUE2
与SomeEnum.VALUE2
完全相同。枚举常量表示为静态字段。
答案 1 :(得分:2)
if (someObject.getStatus() == SomeEnum.VALUE1.VALUE2) { ... }
相当于
if (someObject.getStatus() == SomeEnum.VALUE2) { ... }
==
将比较非原始类型的双方内存地址。
答案 2 :(得分:2)
不要在Android http://developer.android.com/training/articles/memory.html#Overhead
中使用Enum(由于声誉问题,我无法发表评论,所以我在这里写道。)