9

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

inner classes cannot have static declarations编译类(下面的源代码)时,编译器会在 NULL 类变量上发出错误(“ ”)。这和预期的一样!

但是,零类变量不会产生错误。这个我不明白!

为什么这种差异似乎允许在内部类中静态声明简单类型,但不允许对象。

(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);
        }
    };
}
4

1 回答 1

14

问题是内部类不能具有初始化非平凡常量和非常量所需的静态初始化程序块。

于 2012-09-25T13:46:37.803 回答