[英]Why Enum constructor can't have protected or public access modifier
[英]Why can't enum constructors be protected or public in 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
修饰符,则会给出编译器错误。
将Enums视为具有有限数量实例的类。 除了您最初声明的实例之外,永远不会有任何不同的实例。
因此,您不能拥有公共或受保护的构造函数,因为这将允许创建更多实例。
注意:这可能不是官方原因。 但这对我来说最有意义的是用这种方式来考虑enums
。
枚举包含一组固定的值,这些值必须在编译时都知道。 在运行时创建新文字是没有意义的,如果构造函数是可见的,这是可能的。
这是因为枚举是Java包含固定的常量值。 因此,拥有公共或受保护的构造函数是没有意义的,因为您无法创建枚举实例。
另请注意,内部枚举转换为类,如下所示。
enum Color {
RED, BLUE, YELLOW;
}
这将在内部转换为:
public final class Color {
private Color() {}
public static final Color RED = new Color();
public static final Color BLUE = new Color();
public static final Color YELLOW = new Color();
}
因此,每个枚举常量都表示为枚举类型的对象。 由于我们无法显式创建枚举对象,因此我们无法直接调用枚举构造函数。
要记住的关键点是,未包含在类中的枚举只能使用public或default修饰符声明,就像非内部类一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.