在编码时,我遇到了一个奇怪的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);
}
};
}
问题是内部类不能有一个静态初始化器块,这是初始化非平凡常量和非常量所必需的。