gpt4 book ai didi

java - 为什么 Java 在只识别最后一个时允许引用两个(或更多)枚举?

转载 作者:行者123 更新时间:2023-11-29 09:44:25 24 4
gpt4 key购买 nike

我偶然发现了这一点,想知道是否有 java 允许它的原因。

这是我的意思的示例:

public enum Days {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}

public class EnumTest {

public static void main(String[] args) {

methodThatDoesSomething(Days.FRIDAY);
}

public static void methodThatDoesSomething(Days day){

System.out.println(day);
}
}

正如预期的那样,此输出为 FRIDAY

如果我这样修改代码:

public class EnumTest {

public static void main(String[] args) {

methodThatDoesSomething(Days.FRIDAY.MONDAY);
}

public static void methodThatDoesSomething(Days day){

System.out.println(day);
}
}

此输出为 MONDAY

我也收到警告:

The static field Days.MONDAY should be accessed in a static way

但它仍然可以编译和运行。

任何有关何时可以使用此多重枚举引用的示例都将不胜感激。

最佳答案

这不是具体的枚举问题 - 它只是关于任何静态成员也(不幸的是)通过该类型的表达式有效。最常见的例子是:

Thread thread = new Thread(...);
thread.start();
thread.sleep(1000); // This doesn't do what it looks like

对于一个更接近你原来的非枚举例子,它基本上是这样的:

class Foo {
public static final Foo X = null;
public static final Foo Y = new Foo();
}

public class Test {
public static void main(String[] args) {
Foo foo = Foo.X.Y;
}
}

请注意,即使 Foo.X 为 null,您也不会在此处获得空指针异常,尽管奇怪的是生成的代码确实仍然访问 Foo .X 在完全忽略它之前。好像是这样写的:

Foo ignored = Foo.X;
Foo foo = Foo.Y;

基本上,这是 Java 语言设计中的一个错误步骤,现在修复它为时已晚 - 我们能做的最好的事情就是收到警告,然后修复代码以通过类名访问静态成员。

关于java - 为什么 Java 在只识别最后一个时允许引用两个(或更多)枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15924566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com