繁体   English   中英

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

[英]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修饰符,但如果给定publicprotected修饰符,则会给出编译器错误。

将Enums视为具有有限数量实例的类。 除了您最初声明的实例之外,永远不会有任何不同的实例。

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

注意:这可能不是官方原因。 但这对我来说最有意义的是用这种方式来考虑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();
}

因此,每个枚举常量都表示为枚举类型的对象。 由于我们无法显式创建枚举对象,因此我们无法直接调用枚举构造函数。

要记住的关键点是,未包含在类中的枚举只能使用publicdefault修饰符声明,就像非内部类一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM