为什么Java允许枚举常量使用代码块?
我正在键入口袋妖怪类型的枚举,突然
public enum Type {
NORMAL () { // This is the question. Why does Java allow this?
int x = 10; // Only accepts variables?
};
Type () {}
}
这段代码编译正确
常量的代码块有什么用
你可以在下面搜索框中键入要查询的问题!
我正在键入口袋妖怪类型的枚举,突然
public enum Type {
NORMAL () { // This is the question. Why does Java allow this?
int x = 10; // Only accepts variables?
};
Type () {}
}
这段代码编译正确
常量的代码块有什么用
# 1 楼答案
枚举中的代码块允许您重写枚举类型中定义的方法。比如说
这里
Foo.BANANA.doFoo()
将产生"Banana foo"
,而对任何其他Foo
调用doFoo()
将产生"Default foo"
# 2 楼答案
在Java中,枚举不是整数的简单别名,就像在许多其他编程语言中一样。在Java中,枚举值是完整的对象,可以具有用户定义的数据、方法等
如果按如下方式编写枚举类:
实际上,您定义了一个类
PetType
(它是标准Java类Enum
的子类)和这个类的两个实例CAT
和GOLDFISH
。Java编译器确保不再有更多的PetType
实例,并且CAT
和GOLDFISH
始终引用同一个对象但除此之外
MyEnum
是一个正常的类。您可以为其定义成员变量和方法,您可以通过构造函数对其进行初始化:您可以在自己的代码中使用:
这就是为什么可以在枚举定义中使用代码
您在代码中所做的基本上是定义
Type
类的另一个(匿名)子类,它定义了一个值为10的额外成员变量x
。这个子类的唯一实例是NORMAL
对象。如果您编译代码,您将看到一个Type$1.class
格式的文件,这就是这个子类