コーディング中に、私は奇妙なJavaコンパイラの動作に遭遇しました。Javaコンパイラのエラーパズル:「内部クラスは静的宣言を持つことができません」 - 単純型以外
クラス(以下のソース)をコンパイルすると、コンパイラはNULLクラス変数にエラー( "inner classes cannot have static declarations
")を発行します。これは予想通りです!
ただし、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 – Magicode
null参照であるか新しいオブジェクトであるか() "の参照は違いはなく、どちらもコンパイラエラーを引き起こします。 – Morten