将枚举的构造函数设为私有或默认值有什么区别?

Dar*_*hit 3 java enums

我有一个枚举类,如下所示:

public enum TargetingName {

CONTENT("Content", "Content Targeting"), TECHNOLOGY("Technology", "Technology Targeting");

private TargetingName(String textToSelect, String textDisplayed) {
        this.textToSelect = textToSelect;
        this.textDisplayed = textDisplayed;
    }

    private String textToSelect;
    private String textDisplayed;

    public String getTextDisplayed() {
        return textDisplayed;
    }

    public String getTextToSelect() {
        return textToSelect;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我没有在enum的构造函数中写private,它将默认吗?如果是,那有什么区别?如果否,那么如何制作默认构造函数?

And*_*lko 8

8.9.2。枚举主体声明

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

除了您需要写一个额外的单词,这没有什么区别。

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

如果我不private使用enum的构造函数编写代码,它将使其默认吗?

如果“默认”是指private,则是。

如果“默认”是指package-private,否。无论是public也不protected是允许的。枚举构造函数始终为private

8.9.2。枚举主体声明

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


And*_*ner 6

枚举构造函数不能是私有的。

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

...

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

除了私有以外,没有其他理由:您不能手动创建枚举的新实例(这就是枚举的重点)。

如果需要创建实例,可以使用常规类。