Java:导入与另一个导入语句冲突

Posted

技术标签:

【中文标题】Java:导入与另一个导入语句冲突【英文标题】:Java : The import collides with another import statement 【发布时间】:2012-02-07 16:22:51 【问题描述】:

我已将现有 Java 应用程序导入我的工作区。 我看到,同名的类存在于应用程序的不同包中。

例如,一个名为“Status.java”的类存在于

com.tata.model.common.Status;
com.bayer.frontlayer.dao.Status;

当我尝试在一个类中同时使用它们时,例如如下所示

import com.tata.model.common.Status;
import  com.bayer.frontlayer.dao.Status;
public class Adapter



它开始在 Eclipse 中给出错误声明

import com.bayer.frontlayer.dao.Status 与另一个 import 语句冲突

有没有办法在不改变类名的情况下解决这个问题??

谢谢。

【问题讨论】:

【参考方案1】:

在适用的情况下直接应用完整的类名称。例如-

public class SomeClass 

public someMethod() 

com.myapp.someotherpackage.Status = "something";

com.some.other.package.Status = "otherthing";

if(com.myapp.someotherpackage.Status == com.some.other.package.Status) 


....


【讨论】:

非常感谢大家的帮助,但不幸的是我只能勾选一个答案。【参考方案2】:

您可以在不导入它们的情况下显式使用它们,因此包含的包名称区分两者:

 //No imports required!
public class Adapter

     private com.tata.model.common.Status x;
     private com.bayer.frontlayer.dao.Status y;

【讨论】:

没有更简洁的方法吗?人们如何最终只通过最后几个包来引用它,例如 common.Status 而不是 com.tata.model.common.Status @pete 你能举个例子吗?【参考方案3】:

您可以只导入其中一个类并为另一个类使用完全限定名称。

例如

import com.tata.model.common.Status;
//import  com.bayer.frontlayer.dao.Status;

class SomeClass
    void someMethod()
       new Status(); //  com.tata.model.common.Status
       new com.bayer.frontlayer.dao.Status(); //com.bayer.frontlayer.dao.Status
    

虽然我认为如果您只对两个类都使用完全限定的名称,那么在您的情况下就不会那么混乱了。

【讨论】:

没有更简洁的方法吗?人们如何最终只通过最后几个包来引用它,例如 common.Status 而不是 com.tata.model.common.Status 如果您拥有任何包,您可以重命名这些类。如果它们实现了足够的任何其他接口,则可以基于其中一种接口类型声明变量。你也可以包裹物体,但这会弊大于利。其他语言让你 rename 导入。

以上是关于Java:导入与另一个导入语句冲突的主要内容,如果未能解决你的问题,请参考以下文章

Java连载50-import导入访问控制权限修饰符

Import语句基础

Import语句基础

Excel导入数据批量生产建表sql语句

9_模块_包导入

eclipse写java时没有import对应的包,报错,点小红叉不提示导入包。手工把import语句写全OK,但是不方便。