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

时间:2010-09-16 21:54:20

标签: java import name-collision

我想导入这两个名为Query的类 - 一个是 JDO 类,另一个是 JPA 类,用于不同的方法同一个班级。

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

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

3 个答案:

答案 0 :(得分:16)

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

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

然后你可以导入另一个没有名字冲突。

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

现有答案是正确的。我想向您展示如何在Kotlin(docs)中处理类名冲突。

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

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

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