当前位置: 首页 > 面试题库 >

为什么不能用Java保护枚举构造函数或将其公开?

齐胜涝
2023-03-14
问题内容

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

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



 类似资料:
  • 问题内容: 为什么枚举的构造函数不能访问静态字段和方法?这对于一个类是完全有效的,但对于枚举是不允许的。 我正在尝试将枚举实例存储在静态Map中。考虑下面的示例代码,它允许通过abbreivation查找: 这将不起作用,因为枚举不允许在其构造函数中使用静态引用。然而,它只是在实现为类的情况下才起作用: 问题答案: 因为所有静态字段(包括表示枚举值的静态字段)都是按文本顺序初始化的,并且枚举值始终

  • 问题内容: 为什么Java中的构造函数不能是final,static或abstract? 例如,您可以向我解释为什么这无效吗? 问题答案: 当您设置方法时,其含义是: “我不希望任何类覆盖它。” 但是根据Java语言规范: JLS 8.8- “构造函数声明不是成员。它们从不继承,因此不受隐藏或覆盖。” 当您设置方法时,其含义是: “此方法没有主体,应在子类中实现。” 但是,使用关键字时会隐式调用构

  • 我不确定我是否过度工程化了,但我正在考虑创建一个枚举,其中包含一个枚举列表作为它的值,从中我可以得到它的值。 我无法确定枚举的类型,以便正确地将值数组筛选到正确的枚举。例如,我可以用轻松地获得US枚举。我遇到的困难是从该数组中获得正确的值。我尝试比较名称,

  • 或修饰符不允许与构造函数一起使用。为什么?我试过阅读标准文档,但没有很好地理解它。

  • 问题内容: 为什么我不能在包外部使用受保护的构造函数来编写这段代码: Check.java 即使我扩大了班级,为什么仍会收到错误消息?请解释 编辑: 编译错误: 构造函数Example()不可见 问题答案: protected修饰符仅用于包中以及包外部的子类中。使用对象创建对象时,默认情况下将调用父类的构造函数。 由于父类构造函数受到保护,因此您会遇到编译时错误。您需要根据JSL 6.6.2.2调

  • 问题内容: 由于枚举构造函数只能由其常量调用,因此为什么要允许它成为包私有的? 问题答案: 构造函数实际上不是包私有的…隐式地意味着接口方法是隐式的,即使您不添加关键字也是如此。 JLS(第8.8.3节)的相关部分规定: 如果没有为普通类的构造函数指定访问修饰符,则该构造函数具有默认访问权限。 如果没有为枚举类型的构造函数指定访问修饰符,则构造函数为。 如果枚举类型(第8.9节)的构造函数声明为或