为什么不能枚举构造函数在Java中被保护或公开?

整个问题在标题中。 例如:

enum enumTest { TYPE1(4.5, "string1"), TYPE2(2.79, "string2"); double num; String st; enumTest(double num, String st) { this.num = num; this.st = st; } } 

构造函数没有使用默认或private修饰符,但给了我一个编译器错误,如果给定的publicprotected修饰符。

把枚举看作一个具有有限个实例的类。 除了最初声明的那些实例之外,永远不会有任何不同的实例。

因此,你不能有一个公共或受保护的构造函数,因为这将允许创build更多的实例。

注意:这可能不是官方原因。 但是对我来说,这样想想enums是最有意义的。

因为你不能自己调用​​构造函数。

这是关于枚举的教程必须说的:

注意:枚举types的构造函数必须是包私有或私有访问。 它会自动创build在枚举正文开头定义的常量。 你不能自己调用​​一个枚举构造函数。

枚举包含一组固定的值,它们在编译时必须全部知道。 在运行时创build新的文字是没有意义的,如果构造函数是可见的,这将是可能的。

关键要记住的是,不包含在类中的枚举可以只用publicdefault修饰符来声明,就像非内部类一样。

如果你想声明enum public然后用enum的名字保存enum文件。

假设你做了一个枚举Book{}然后通过Book.java保存并为类创build一个单独的文件

这是公开声明enum的唯一方法。