【发布时间】:2016-04-19 05:56:53
【问题描述】:
我知道一个枚举
enum Year
{
First, Second, Third, Fourth;
}
转换成
final class Year extends Enum<Year>
{
public static final Year First = new Year();
public static final Year Second = new Year();
public static final Year Third = new Year();
public static final Year Fourth = new Year();
}
当我尝试实例化枚举(不是类)时,出现编译时错误:
error: enum types may not be instantiated
Year y = new Year();
据我所知,私有构造函数使类不可实例化。而且我认为编译器提供了一个私有构造函数。但是当看到我们可以使用默认修饰符为枚举定义构造函数但仍然无法创建枚举类型的对象时,我再次感到困惑。
enum Year
{
First, Second, Third, Fourth;
Year()
{
}
}
class Example
{
public static void main(String[] args)
{
Year y = new Year();
}
}
我的疑问是,如果不是关于构造函数,那么是什么让 Java 中的枚举不可实例化?
【问题讨论】:
-
“因为语言是这样说的。”真的,没有比这更好的答案了。您的
enum声明导致四个对象被预创建,并且类的每个对象都必须是这四个对象之一。所以没有理由实例化另一个。 -
旁注:
enum Year被编译成final class Year extends Enum<Year>。
标签: java constructor enums instantiation