可能性の重複:
Why can't enum constructors be protected or public in Java?Javaの列挙型内のコンストラクタをprivateに宣言するのはなぜですか?
次のコードは、単にJavaでenum
の使用方法を示します。これは何の関係もなく、そのメンバーの値を集計するだけです。enum
package enumtest;
enum Sum
{
Pen(10),Pencil(15),Eraser(5);
private int value;
private Sum(int value)
{
this.value=value;
}
public int getValue()
{
return(value);
}
}
final public class Main
{
public static void main(String...args)
{
int sum=0;
for(Sum o:Sum.values())
{
sum+=o.getValue();
}
System.out.println("sum = "+sum);
}
}
これは、コンソール上sum = 30
を表示します。ここでは1つの質問だけ。一般的に、クラスでは、コンストラクタはpublic
と宣言されています。なぜ、enum
のコンストラクタはprivate
と宣言されますか?その他の修飾子public
とprotected
は許可されていません。 public
と宣言しても、コンパイル時にエラーが発生します。どうして?
しかし、パッケージで保護された(修飾子なしの)コンストラクタは問題なく、基本的に同じ引数を使用できます。 – Voo
通常のクラスのコンストラクタにアクセス修飾子が指定されていない場合、 。 * enum型*のコンストラクタにアクセス修飾子が指定されていない場合、コンストラクタは** private **になります。 * enum型*(§8.9)のコンストラクタが 'public'または' protected'と宣言されている場合、コンパイル時エラーです。 [§8.8.3]から http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.8.3 JLS。 – Lion
上記はJava 6の言語仕様です。 Java 8仕様では、列挙型コンストラクタの可視性に関する情報は、[§8.9.2](http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls- 8.9.2)。 –