将Java枚举与点语法(enum.value1.value2)结合起来?

时间:2015-06-26 18:23:11

标签: java android enums

我正在浏览一些现有的(和正在运行的)代码,并遇到了这样的一行:

if (someObject.getStatus() == SomeEnum.VALUE1.VALUE2) { ... }

SomeEnum是一个简单的枚举,如下所示:

public enum SomeEnum {
    VALUE1,
    VALUE2,
    VALUE3,
    ...
}

private SomeEnum() {}

现在,上面的比较是做什么的?更确切地说,那里的两个枚举值的组合是什么?因为我认为这是完全错误的,所以我很惊讶没有看到任何警告或错误。但是,它编译并运行得很好。有人可以告诉我这会做什么吗?

3 个答案:

答案 0 :(得分:5)

如果你使用像Eclipse这样的IDE,你应该得到一个警告,说明VALUE2应该以静态方式访问。使用javac -Xlint:all,您也会收到警告。除此之外,SomeEnum.VALUE1.VALUE2SomeEnum.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

(由于声誉问题,我无法发表评论,所以我在这里写道。)