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

为什么枚举可以具有包私有的构造函数?

龚跃
2023-03-14
问题内容

由于枚举构造函数只能由其常量调用,因此为什么要允许它成为包私有的?


问题答案:

构造函数实际上不是包私有的…隐式地意味着private接口方法是隐式的,public即使您不添加关键字也是如此。

JLS(第8.8.3节)的相关部分规定:

如果没有为普通类的构造函数指定访问修饰符,则该构造函数具有默认访问权限。

如果没有为枚举类型的构造函数指定访问修饰符,则构造函数为private

如果枚举类型(第8.9节)的构造函数声明为public或,则是编译时错误protected



 类似资料:
  • 问题内容: 我试图了解Java枚举是如何工作的,我得出的结论是,它与将其构造函数声明为private的普通Java类非常相似。 我刚刚得出这个结论,它并不是基于太多的思考,但是我想知道我是否错过了任何事情。 因此,下面是一个简单的Java枚举和一个等效的Java类的实现。 上面和下面的代码在含义上有什么区别? 问题答案: 差异: 枚举扩展并获得其所有不错的功能: 通过正确的序列化自动实现单例行为

  • 问题内容: 最近,我经常使用枚举。所以我想知道… 私有Enum构造函数和带有任何可见性修饰符(package-private)的枚举构造函数之间有什么区别吗? 问题答案: 根据java 文档 枚举类型的构造函数必须是程序包私有或私有访问。 但加入了JLS 如果没有为枚举类型的构造函数指定访问修饰符,则该构造函数为私有。 因此,package-private和private之间没有区别。

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

  • 问题内容: 构造函数可以私有吗?私有构造函数有什么用? 问题答案: 是的,构造函数可以是私有的。有不同的用途。一种这样的用法是用于单例设计反模式,我建议你不要使用它。另一个更合理的用法是委派构造函数。你可以让一个构造函数接受很多不同的选项,而这些选项实际上是实现细节,因此你将其设为私有,但是其余的构造函数将委托给它。 作为委派构造函数的示例,以下类允许你保存值和类型,但仅允许你对类型的子集进行保存

  • 问题内容: 在春季,bean的类可能没有公共构造函数,而只有私有构造函数吗?创建bean时会调用此私有构造函数吗?谢谢。 问题答案: 是的,Spring可以调用私有构造函数。如果找到具有正确参数的构造函数,无论可见性如何,它将使用反射将其构造函数设置为可访问的。

  • 问题内容: 构造函数可以是私有的吗?私有构造函数有何用处? 问题答案: 是的,构造函数可以是私有的。这有不同的用途。一个这样的用途是用于singleton设计反模式,我建议您不要使用它。另一个更合法的用法是委托构造函数;您可以有一个构造函数,它接受许多不同的选项,这实际上是一个实现细节,所以您将其设为私有,但剩余的构造函数将其委托给它。 作为委托构造函数的一个例子,下面的类允许您保存一个值和一个类