2012-01-11 132 views
16

我已将一个现有的Java应用程序导入到我的Workspace中。 我看到,具有相同名称的类与应用程序中的不同包中存在。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与另一个进口语句发生冲突

是否有无论如何解决这个问题,而不改变类名?

谢谢。

回答

27

你可以明确地使用,而不必导入它们,所以包括包名两者之间的区别:

//No imports required! 
public class Adapter 
{ 
    private com.tata.model.common.Status x; 
    private com.bayer.frontlayer.dao.Status y; 
} 
+9

java一直在慢慢地杀死我...... – Ryan 2013-06-07 03:38:45

+0

有没有一种较为冗长的方式?人们最终只能通过最后几个包来引用它,例如common.Status,而不是com.tata.model.common.Status – pete 2015-05-27 18:42:25

+0

@pete你能举个例子吗? – nasukkin 2016-09-01 20:42:50

10

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

例如

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 
    } 
} 

虽然我认为这将是你的情况少混乱,如果你只使用这两个类的完全限定名称。

+0

有没有一种较为冗长的方式?人们最终只通过最后几个包来引用它,例如common.Status而不是com.tata.model.common.Status – pete 2015-05-27 18:42:41

+0

如果您拥有任何包,则可以重命名这些类。如果他们实现了足够的其他接口,则可以根据其中一种接口类型声明变量。你也可以包裹物体,但那会造成更多的伤害。其他语言让你[重命名](http://stackoverflow.com/a/28362090/469220)进口。 – Vlad 2015-05-28 11:06:01

2

直接申请全类名(如适用)。例如 -

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) { 

} 
.... 
} 
} 
+0

非常感谢您的帮助,但不幸的是,我只能挨打一个答案。 – Kiran 2012-01-11 09:51:33