好的,这是 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 中“静态导入”一个“等于”方法?