为了账号安全,请及时绑定邮箱和手机立即绑定

当我将枚举构造函数设置为私有或默认时,会有什么区别?

当我将枚举构造函数设置为私有或默认时,会有什么区别?

一只萌萌小番薯 2023-08-09 17:14:19
首先,对这个非常基本的问题表示歉意。我对 stackoverflow 还很陌生,但我对此感到摸不着头脑,希望得到一些启发。好吧,今天在工作中,我和我同事的代码经过了同行评审,并被告知要替换它。Boolean isOpen;*some processing that involves altering the value of isOpen*if (!isOpen){...}有了这个..if (Objects.equals(Boolean.FALSE, isOpen)){...}我知道这两种实现都是正确的并且产生相同的结果。我也知道使用对象包装器的后果Boolean。我不明白在这种情况下使用 NOT 运算符和 Objects.equals() 之间的区别。我知道在运行时isOpen将会被拆箱。两者都仍然容易受到a的影响NullPointerException,那么有什么区别呢?它有点超越了逻辑运算符的目的。
查看完整描述

2 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

8.9.2. 枚举体声明

在枚举声明中,没有访问修饰符的构造函数声明是私有的。

除了你需要多写一个单词之外,这没有任何区别。

我看到开发人员将private其变得更加明确(以强调不能在枚举之外使用枚举构造函数的事实)。我觉得没有必要。

如果我不写private枚举的构造函数,它会使其默认吗?

如果你说的“默认”是指private,是的。

如果“默认”是指package-private,则不是。既不被允许,publicprotected不被允许。枚举构造函数始终是private.

8.9.2. 枚举体声明

如果枚举声明中的构造函数声明是公共的或受保护的(第 6.6 节),则会出现编译时错误。


查看完整回答
反对 回复 2023-08-09
?
jeck猫

TA贡献1909条经验 获得超7个赞

枚举构造函数只能是私有构造函数。

在枚举声明中,没有访问修饰符的构造函数声明是私有的。

...

如果枚举声明中的构造函数声明是公共的或受保护的,则会出现编译时错误。

没有理由让它成为私有的:您无法手动创建枚举的新实例(这有点是枚举的要点)。

如果您想要可以创建实例的东西,请使用常规类。


查看完整回答
反对 回复 2023-08-09
  • 2 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信