OK、JLS スペシャリスト向けの非常に興味深い Java 7 言語パズルがあります。次のコードは、javac でも Eclipse でもコンパイルされません。
package com.example;
public class X {
public static X com = new X();
public void x() {
System.out.println(com.example.X.com);
// cannot find symbol ^^^^^^^
}
}
メンバーが 内からのパッケージcom
へのアクセスを完全にブロックしているように見えます。ただし、これは完全には適用されません。たとえば、次のように動作します。com.*
X
public void x() {
System.out.println(com.example.X.class);
}
私の質問:
- この行動はJLSからどのように正当化されますか?
- この問題を回避するにはどうすればよいですか
これは、完全な修飾com.example.X
が必要で、com
メンバーの名前を変更できない、生成されたコードの実際の問題を簡略化したものにすぎないことに注意してください。
更新:実際には、次のような同様の問題である可能性があると思います: Javaで「equals」メソッドを「静的インポート」できないのはなぜですか?