为什么Java中枚举中的构造函数只能声明为私有?

时间:2011-12-24 03:33:45

标签: java constructor enums

  

可能重复:
  Why can't enum constructors be protected or public in Java?

以下代码演示了如何在Java中使用enum。它与enum

的成员的值无关,只是总结。{1}}。

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?其他修饰符publicprotected不允许使用它。甚至声明它public会导致编译时错误。为什么呢?

1 个答案:

答案 0 :(得分:3)

您也可以在没有任何关键字的情况下声明它们,例如:只是Sum(int value)

原因是因为Java本身将为您创建各种实例,并作为单例 - 这是Enums正常工作所必需的。 publicprotected意味着或允许其他呼叫者创建相同枚举的其他实例,这会破坏Singleton保证。