1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 枚举与常量 java_java – 为什么两个枚举常量可以在同一行中使用?

枚举与常量 java_java – 为什么两个枚举常量可以在同一行中使用?

时间:2020-01-07 19:12:47

相关推荐

枚举与常量 java_java – 为什么两个枚举常量可以在同一行中使用?

我将尝试在上述评论中添加更多内容.

枚举值有些特殊.从Java枚举的Wikipedia条目开始:

An enum type in Java is actually a special compiler-generated class rather than an arithmetic type, and enum values behave as global pre-generated instances of that class. Enum types can have instance methods and a constructor (the arguments of which can be specified separately for each enum value).

因此,虽然它们仅在编译时生成一次,但它们是给定枚举类型的特殊实例.因此,它可以访问该类的其他成员.请注意,这也意味着您无法自己实例化枚举类型(即使用new).

From one instance of enum class you can access another instance of same enum class? Which I haven’t seen in normal Java class.

这在普通类中也是可能的,虽然不赞成,因为它没有提供任何实际好处,甚至可能导致问题和错误(通过NullPointerExceptions).

考虑以下两个类:

public class SomeClass

{

public final static int MODE = 1;

private String message;

public SomeClass(String message)

{

this.message = message;

}

}

public class Test

{

public static void main(String[] args)

{

SomeClass myObject = new SomeClass("bla");

System.out.println(myObject.MODE);

System.out.println(OtherClass.MODE);

}

}

这只会打印出来:

1

1

但是,假设您正在执行某些任务,其中您迭代SomeClass对象的列表,其中某些条目可能为null(可能是因为它们在某些时候从集合中删除,或者因为在插入时允许空条目为原因).

在这种情况下,如果您通过实例访问静态成员,您将获得NPE,而通过类本身访问它将按预期工作.

请注意,问题中描述的行为特定于枚举类型本身(即Currency.NICKLE.DIME …).有一种方法可以模仿这种行为,如下所示:

public class SomeClass

{

public static SomeClass REF; // not final anymore since 'this' must be the first line in a constructor call

public String message; // note this is public now

public SomeClass(String message)

{

this.message = message;

}

public void setRef() {

REF = this;

}

}

public class Test

{

public static void main(String[] args)

{

SomeClass myObject = new SomeClass("bla!");

System.out.println(myObject.REF);

System.out.println(SomeClass.REF);

myObject.setRef();

System.out.println(SomeClass.REF);

System.out.println(SomeClass.REF.message);

}

}

这将打印出来:

null

null

SomeClass@... // Object.toString() call

bla!

但是使用这种糟糕的技术和许多缺点绝对没有任何好处.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。