在编码过程中,我遇到了一个奇怪的Java编译器行为。
当编译该类(以下是源代码)时,编译器会在NULL类变量上发出错误(“内部类不能有静态声明”)。这是符合预期的!
然而,对于ZERO类变量,没有生成错误。我不理解这个问题!
为什么会有这种差异,似乎允许在内部类中使用简单类型的静态声明,但不允许使用对象?
(javac -version: 1.6.0_24)
当编译该类(以下是源代码)时,编译器会在NULL类变量上发出错误(“内部类不能有静态声明”)。这是符合预期的!
然而,对于ZERO类变量,没有生成错误。我不理解这个问题!
为什么会有这种差异,似乎允许在内部类中使用简单类型的静态声明,但不允许使用对象?
(javac -version: 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);
}
};
}
Object
引用不会。我记得在这个YouTube视频中看到过编译器如何处理带有null
引用的常量:http://www.youtube.com/watch?v=V1vQf4qyMXg&t=68m1s - Jimbali