Java 编译器错误拼图器:"inner classes cannot have static declarations" - 简单类型除外



在编码时,我遇到了一个奇怪的Java编译器行为。

编译类(下面的源代码)时,编译器会在 NULL 类变量上发出错误("inner classes cannot have static declarations")。这是意料之中的!

但是,不会在 ZERO 类变量上生成错误。这个我不明白!

为什么这种差异,它似乎允许在内部类中使用简单类型的静态声明,但不允许 Object 的静态声明。

(javac 版本: 1.6.0_24)

public class Outer {
    public static final Runnable HELLO = new Runnable() {
        // No compiler error
        public static final int ZERO = 0;
        // Causes compiler error: "inner classes cannot have static declarations"
        public static final Object NULL = null;
        @Override
        public void run() {
            System.out.println("Hello " + ZERO + NULL);
        }
    };
}

问题是内部类不能有一个静态初始化器块,这是初始化非平凡常量和非常量所必需的。

最新更新