日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/19 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 枚举与常量 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 – 为什么两个枚举常量可以在同一行中使用?的全部內容,希望文章能夠幫你解決所遇到的問題。

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