为什么Java允许枚举常量的代码块?

vix*_*ant 4 java enums

我突然间输入了口袋妖怪类型的枚举

public enum Type {

    NORMAL () { // This is the question. Why does Java allow this?
        int x = 10; // Only accepts variables?
    };

    Type () {}

}
Run Code Online (Sandbox Code Playgroud)

此代码编译正确.

代码块对常量有什么用?

khe*_*ood 10

枚举中的代码块允许您覆盖枚举类型中定义的方法.例如

enum Foo {
    PEAR,
    BANANA() {
        @Override
        public void doFoo() {
            System.out.println("Banana foo");
        }
    },
    APPLE,
    GRAPE;

    public void doFoo() {
        System.out.println("Default foo");
    }
}
Run Code Online (Sandbox Code Playgroud)

Foo.BANANA.doFoo()将产生"Banana foo",而呼吁doFoo()任何其他Foo将产生"Default foo".