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

将Java枚举与点语法相结合(enum.value1.value2)?,java,android,enums,Java,Android,Enums,我正在浏览一些现有的(和正在运行的)代码,遇到了这样一行代码: if (someObject.getStatus() == SomeEnum.VALUE1.VALUE2) { ... } public enum SomeEnum { VALUE1, VALUE2, VALUE3, ... } private SomeEnum() {} 其中SomeEnum是一个简单的枚举,如下所示: if (someObject.getStatus() == SomeEnu

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

if (someObject.getStatus() == SomeEnum.VALUE1.VALUE2) { ... }
public enum SomeEnum {
    VALUE1,
    VALUE2,
    VALUE3,
    ...
}

private SomeEnum() {}
其中SomeEnum是一个简单的枚举,如下所示:

if (someObject.getStatus() == SomeEnum.VALUE1.VALUE2) { ... }
public enum SomeEnum {
    VALUE1,
    VALUE2,
    VALUE3,
    ...
}

private SomeEnum() {}

现在,上面的比较有什么作用?更准确地说,其中两个枚举值的组合有什么作用?我很惊讶没有看到任何警告或错误,因为我认为这是完全错误的。然而,它编译和运行都很好。有人能告诉我这将做什么吗?

如果您使用Eclipse这样的IDE,您应该得到一个警告,说应该以静态方式访问
VALUE2
。使用
javac-Xlint:all
还将得到一个警告。除此之外,
SomeEnum.VALUE1.VALUE2
SomeEnum.VALUE2
完全相同。枚举常量表示为静态字段

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

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

=
将比较非原语类型两侧的内存地址。

不要在android中使用Enum


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

枚举是隐式的。这可能就是他没有看到警告的原因。仅供参考,我使用的是Android Studio,它没有给我警告。无论如何,谢谢你的回答(恰好与你之前一分钟的答案几乎相同)。
Boolean.TRUE.FALSE
:)现在你可以发表评论了。谷歌说:枚举通常需要两倍于静态常量的内存。所以我们应该避免使用它。作为android开发者的一个例子,我可以说我们正在使用Serviability()方法。它需要int变量。但我们给予的是看得见的、看不见的或消失的。它们不是枚举。因此,android开发者也在使用int而不是enum,虽然这不是对当前问题的回答,但我非常感谢这条信息,因为我根本没有意识到这一点。谢谢