【发布时间】:2011-05-30 11:32:12
【问题描述】:
scalac Java 解析器反对我的 Java 代码
imported `Entity' is permanently hidden by definition of object Entity in package domain Asset.java
这似乎是导入和正在编译的包中同名的类之间的冲突。
在我的包里我有一个类
package iMP2020.domain;
public interface Entity {
public Serializable getId();
}
与来自不同包的导入类同名
package iMP2020.domain;
import javax.persistence.Entity; // compiler warning
@Entity
public class Asset {
它在哪里抱怨导入。 Javac 很高兴。请注意,我不必引用我的类版本 - 只要它的存在就足以触发导入警告。
我可以通过删除导入并显式引用@Entity 来解决此问题,但这是否是编译器中的错误?
【问题讨论】:
-
不管是不是bug,你为什么用Scala编译器编译Java代码而不是Java编译器?不管 javac 或 scalac 是否不符合 Java 规范(或者该行为是否未被规范涵盖),如果您想要 javac 行为,请使用 javac?
-
因为 scalac 解析 Java 源代码是为了推断类型签名,以便我们可以在 Java 和 Scala 之间建立循环依赖关系 - codecommit.com/blog/scala/…
-
换句话说,“我在 Java 和 Scala 之间有一个无法解决的循环依赖关系,但无论如何我都可以用 javac 成功编译它,这就是我知道 javac 不会抱怨的原因?”我不知道这是否是一个错误,但不管怎样,你有一个解决方法很好。
-
不知道是不是bug,但鉴于是警告而不是错误,Scala编译器并没有违反Java规范。
-
@Rex 其实我没有任何无法解析的依赖,所以 javac 编译这个就好了。