日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/19 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 枚举与常量 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!

但是使用這種糟糕的技術和許多缺點絕對沒有任何好處.

總結

以上是生活随笔為你收集整理的枚举与常量 java_java – 为什么两个枚举常量可以在同一行中使用?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。