猿问

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

首先,对这个非常基本的问题表示歉意。我对 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,那么有什么区别呢?它有点超越了逻辑运算符的目的。


一只萌萌小番薯
浏览 122回答 2
2回答

杨魅力

8.9.2. 枚举体声明在枚举声明中,没有访问修饰符的构造函数声明是私有的。除了你需要多写一个单词之外,这没有任何区别。我看到开发人员将private其变得更加明确(以强调不能在枚举之外使用枚举构造函数的事实)。我觉得没有必要。如果我不写private枚举的构造函数,它会使其默认吗?如果你说的“默认”是指private,是的。如果“默认”是指package-private,则不是。既不被允许,public也protected不被允许。枚举构造函数始终是private.8.9.2. 枚举体声明如果枚举声明中的构造函数声明是公共的或受保护的(第 6.6 节),则会出现编译时错误。

jeck猫

枚举构造函数只能是私有构造函数。在枚举声明中,没有访问修饰符的构造函数声明是私有的。...如果枚举声明中的构造函数声明是公共的或受保护的,则会出现编译时错误。没有理由让它成为私有的:您无法手动创建枚举的新实例(这有点是枚举的要点)。如果您想要可以创建实例的东西,请使用常规类。
随时随地看视频慕课网APP

相关分类

Java
我要回答