Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scalac解析Java代码时永久隐藏的警告-编译器错误?_Java_Scala_Scalac - Fatal编程技术网

Scalac解析Java代码时永久隐藏的警告-编译器错误?

Scalac解析Java代码时永久隐藏的警告-编译器错误?,java,scala,scalac,Java,Scala,Scalac,ScalacJava解析器反对我的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();

ScalacJava解析器反对我的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吗?

我认为它不是bug。
导入与包成员具有相同的名称是没有意义的。

除了Scala Eclipse插件之外,我似乎无法复制这一点,所以我将等待这一点稳定下来,然后再得出结论。

您有两个
实体
引用,一个用于您的接口,另一个用于
javax.persistence.Entity

尝试用完整的限定名替换第二个,删除导入:

package iMP2020.domain;

public interface Entity {
    public Serializable getId();
}


如果我在另一个包中有一个类与我包中的一个类同名,这是有意义的。当然javac应该是这里的仲裁者,它不会发出警告。@Duncan,对不起,我的意思是编译器不允许您使用两个同名的类。可能javac希望您使用完全限定的类名来引用导入。仅仅它的存在就足以触发对导入的警告。对于上面的代码,javac只考虑显式导入,不给出警告。Scalac抱怨,不管这是不是一个bug,为什么你用Scala编译器而不是Java编译器来编译Java代码?不管javac或scalac是否符合Java规范(或者行为是否不在规范中),如果您想要javac行为,请使用javac?因为scalac解析Java源代码以推断类型签名,这样我们就可以在Java和Scala之间建立循环依赖关系——换句话说,“我在Java和Scala之间有一个无法解决的循环依赖关系,但无论如何,我可以用javac成功编译它,这就是我知道javac不会抱怨的原因。”?“我不知道这是否是一个bug,但不管怎样,你有一个解决方法是很好的。我不知道这是否是一个bug,但考虑到它是一个警告而不是错误,Scala编译器没有违反Java规范。@Rex实际上我没有任何无法解决的依赖项,所以javac可以很好地编译它。尝试“importjavax.persistence”然后在代码中将其用作javax.persistence.Entity。
package iMP2020.domain;

@javax.persistence.Entity
public class Asset {