Java 解决包冲突

Java 解决包冲突,java,packages,Java,Packages,假设我们有一个名为com.example1的包,其中包含一个Hello类(以及其他类) 然后我们有另一个包com.example2也包含Hello类(显然行为不同) 现在假设我们需要com.example1中的每个类和com.example2中的Hello类 import com.example1.*; import com.example2.Hello; 在这种情况下,哪一个会被呼叫 Hello hello = new Hello(); 或者这会导致编译错误 这只是出于好奇而提出的一个理论

假设我们有一个名为
com.example1
的包,其中包含一个
Hello
类(以及其他类)

然后我们有另一个包
com.example2
也包含
Hello
类(显然行为不同)

现在假设我们需要com.example1中的每个类和com.example2中的Hello类

import com.example1.*;
import com.example2.Hello;
在这种情况下,哪一个会被呼叫

Hello hello = new Hello();
或者这会导致编译错误

这只是出于好奇而提出的一个理论问题


由于创建包是为了避免命名冲突,因此当两个包包含两个同名类时会发生什么情况?

它将给出一个编译错误。您必须显式命名该类-
com.example2.Hello Hello=new com.example2.Hello()

它将给出一个编译错误。您必须显式命名该类-
com.example2.Hello Hello=new com.example2.Hello()

最好在声明中明确,而不是让它随机应变。这是一个编译错误


类似的冲突通常发生在
java.util.List
java.awt.List
上。如果您是显式的,就不会产生混淆。

最好在声明中显式,而不是将其留给偶然的机会。这是一个编译错误


类似的冲突通常发生在
java.util.List
java.awt.List
上。如果您是显式的,则不会出现混淆。

它不会给出其他用户所述的编译器错误。它将使用com.example2.Hello。这是因为显式导入(com.example2.Hello)总是比*导入(com.example1.*)具有优先级

它不会像其他用户所说的那样给出编译器错误。它将使用com.example2.Hello。这是因为显式导入(com.example2.Hello)总是比*导入(com.example1.*)具有优先级

@klez-Yeah,但是为了清晰起见,您可以保留导入-只是为了从
java
文件顶部导入类的位置可见。@klez-Yeah,但是为了清晰起见,您可以保留导入内容-只是为了从
java
文件顶部导入类的位置可见。java.awt.List冲突让我沮丧,以至于无法将其从本地开发JRE中删除。java.awt.List冲突让我沮丧,以至于无法将其从本地开发JRE中删除。