为什么不能枚举构造函数在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
修饰符,但给了我一个编译器错误,如果给定的public
或protected
修饰符。
把枚举看作一个具有有限个实例的类。 除了最初声明的那些实例之外,永远不会有任何不同的实例。
因此,你不能有一个公共或受保护的构造函数,因为这将允许创build更多的实例。
注意:这可能不是官方原因。 但是对我来说,这样想想enums
是最有意义的。
因为你不能自己调用构造函数。
这是关于枚举的教程必须说的:
注意:枚举types的构造函数必须是包私有或私有访问。 它会自动创build在枚举正文开头定义的常量。 你不能自己调用一个枚举构造函数。
枚举包含一组固定的值,它们在编译时必须全部知道。 在运行时创build新的文字是没有意义的,如果构造函数是可见的,这将是可能的。
关键要记住的是,不包含在类中的枚举可以只用public或default修饰符来声明,就像非内部类一样。
如果你想声明enum
public然后用enum
的名字保存enum
文件。
假设你做了一个枚举Book{}
然后通过Book.java
保存并为类创build一个单独的文件
这是公开声明enum
的唯一方法。