![](/img/trans.png)
[英]Does private variables have the same access as package/default/no modifier variables in private classes?
[英]Since when have enum constructors' default access modifier been private?
枚舉構造函數的默認訪問修飾符“私有”多久了? 從一開始還是在 Java 8 中發生了變化? 如果是這樣,那么沒有訪問修飾符的構造函數聲明的默認訪問修飾符是什么? (我猜它是默認的(包可訪問),就像其他 java 類的構造函數一樣。)
我找到了一些與此相關的參考文件,但找不到確切的答案。 這是我發現的,
從什么時候枚舉構造函數的默認訪問修飾符為“私有”?
總是。 你不能創建新的枚舉,這就是它們的重點。 您不能擁有枚舉的非私有構造函數(使用來自 openjdk16 的 javac):
> cat Test.java
public enum Test {
FOO, BAR;
public Test() {}
}
> javac Test.java
Test.java:3: error: modifier public not allowed here
讓我們試試 java6(是的,我有 javac6,可以在新的 javas 上運行它)。
> java -jar javac6.jar -bootclasspath openjdk6-rt.jar Test.java
Test.java:3: error: modifier public not allowed here
所以,這個錯誤在 2 年里沒有改變。
讓我們檢查一下javac6中的訪問級別!
> cat Test.java
public enum Test {
FOO, BAR;
Test() {}
}
> java -jar javac6.jar -bootclasspath openjdk6-rt.jar Test.java
> javap -c -private Test
.... lots of decompiled bytecode
private Test();
Code:
0: aload_0
1: aload_1
2: iload_2
3: invokespecial #18 // Method java/lang/Enum."<init>":(Ljava/lang/String;I)V
6: return
... more decompiled bytecode
因此,私人。 一直是,永遠都是。 這就像在問:“圓圈有角嗎?”。
答案是:不。永遠不會。 如果一個圓有一個角,它就不再是一個。 具有公共構造函數的枚舉不是枚舉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.