如何在不同的包中导入两个具有相同名称的类?

我想导入这两个类,它们都命名为Query – 一个是JDO类,另一个是JPA类,用于同一个类中的不同方法。

 import javax.jdo.Query; import javax.persistence.Query; 

有没有办法在文件顶部同时全局导入它们?

我害怕,不。 但是您不必导入类来使用它:只需按其全名引用其中一个类,例如

 javax.jdo.Query query = getJDOQuery(); query.doSomething(); 

然后您可以导入另一个没有名称冲突。

顺便说一句,有时候如果你开始在你的class级中得到很多这样的名字这样的碰撞,那就是重构的一个微妙的暗示:将一个大类的function分成几个小类。

import语句的唯一目的是为完全限定名称建立速记别名。 如果允许您同时导入两者,则会产生歧义,需要解析类型推断,并使您的代码极难阅读。

现有答案是正确的。 我想告诉你如何在Kotlin( docs )中处理类名冲突。

如果存在名称冲突,我们可以通过使用as关键字在本地重命名冲突实体来消除歧义:

 import javax.jdo.Query // Query is accessible import javax.persistence.Query as jpaQuery // jpaQuery stands for 'javax.persistence.Query' 

这就是为什么你应该考虑Kotlin为你的下一个项目+1的原因。