列挙型コンストラクターはその定数によってのみ呼び出すことができるのに、なぜパッケージプライベートにすることが許可されるのですか?
質問する
16825 次
2 に答える
100
コンストラクターは実際にはパッケージプライベートではありません...キーワードを追加しなくても、private
インターフェイスメソッドが暗黙的に行われる方法です。public
JLSの関連セクション(§8.8.3)には次のように記載されています。
通常のクラスのコンストラクターにアクセス修飾子が指定されていない場合、コンストラクターにはデフォルトのアクセス権があります。
列挙型のコンストラクターにアクセス修飾子が指定されていない場合、コンストラクターは
private
です。列挙型(§8.9)のコンストラクターが宣言されている場合はコンパイル時エラー
public
ですprotected
。
于 2011-10-13T00:44:21.547 に答える
5
これは言語の癖です。列挙型コンストラクターは暗黙的にプライベートです。
興味深いことに、次のように、パッケージに表示される列挙型コンストラクターを宣言すると、次のようになります。
public enum MyEnum {
A(0),
B(1);
private final int i;
MyEnum(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
パッケージ内の別のクラスから参照することはできません。試してみると、コンパイラエラーが発生します。
タイプMyEnumをインスタンス化できません
于 2011-10-13T02:01:01.693 に答える