【问题标题】:Java : The import collides with another import statementJava:导入与另一个导入语句冲突
【发布时间】: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 语句冲突

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

谢谢。

【问题讨论】:

    标签: java import importerror


    【解决方案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 导入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    相关资源
    最近更新 更多