整个问题在标题中。例如:
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
修饰符,则会给出编译器错误。
答案 0 :(得分:88)
将Enums视为具有有限数量实例的类。除了您最初声明的实例之外,永远不会有任何不同的实例。
因此,您不能拥有公共或受保护的构造函数,因为这样可以创建更多实例。
注意:这可能不是官方原因。但对我来说,以这种方式考虑enums
是最有意义的。
答案 1 :(得分:19)
因为你不能自己调用构造函数。
以下是tutorials on Enums所说的内容:
注意:枚举类型的构造函数必须是包私有或私有访问。它会自动创建在枚举主体开头定义的常量。您不能自己调用枚举构造函数。
答案 2 :(得分:8)
枚举包含一组固定的值,必须在编译时都知道。在运行时创建新文字是没有意义的,如果构造函数可见,这是可能的。
答案 3 :(得分:0)
这是因为enum是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();
}
因此,每个枚举常量都表示为枚举类型的对象。由于我们无法显式创建枚举对象,因此无法直接调用枚举构造函数。
答案 4 :(得分:-1)
要记住的关键点是,未包含在类中的枚举可以仅使用公共或默认修饰符声明,就像非内部类。