可能重复:
Why can't enum constructors be protected or public in Java?
以下代码演示了如何在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
。这里只有一个问题。通常,在类中,构造函数被声明为public
,那么为什么enum
中的构造函数只能被声明为private
?其他修饰符public
和protected
不允许使用它。甚至声明它public
会导致编译时错误。为什么呢?
答案 0 :(得分:3)
您也可以在没有任何关键字的情况下声明它们,例如:只是Sum(int value)
。
原因是因为Java本身将为您创建各种实例,并作为单例 - 这是Enums正常工作所必需的。 public
或protected
意味着或允许其他呼叫者创建相同枚举的其他实例,这会破坏Singleton保证。