【发布时间】:2013-10-24 18:14:00
【问题描述】:
好的,这是 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 完全阻止了从X 中访问com.* 包。然而,这并没有被彻底应用。例如,以下工作:
public void x() {
System.out.println(com.example.X.class);
}
我的问题:
- JLS 如何证明这种行为是合理的?
- 如何解决此问题
注意,这只是对生成代码中实际问题的简化,其中需要 com.example.X 的完整限定,并且不能重命名 com 成员。
更新:我认为它实际上可能是一个类似的问题:Why can't I "static import" an "equals" method in Java?
【问题讨论】:
-
生成的代码,嗯?我知道 JAXB 使用绑定文件来更改包名称以避免在从模式和 WSDL 生成代码时出现类似问题。不确定这是否适合您。
-
@FrustratedWithFormsDesigner:是的,重命名包是一种选择。但由于我是代码生成器的作者(jOOQ,而不是 JAXB),我想知道更多:-)
标签: java visibility java-7 jls