2010-10-29 199 views
4

同一類可以存在於多個包中? 換句話說,我可以在com.test.package1com.test.package2dummy.java類嗎?不同包中的同一類名稱

更新

現在我複製從包1類,並放置在包裝2,現在我創建類的實例,我想這種情況下指向類存在於包1,但當前點到package1路徑,我該如何修改它?

哦,所以我不能做這樣的事情:

Foo = new Foo() //pointing to 1 package Foo class 
Foo = new Foo() // pointing to 2 package Foo class 

回答

19

是的,你可以有兩個班在多個包中的同名。但是,您無法使用兩個import語句在同一個文件中導入這兩個類。如果你真的需要引用它們,你將不得不完全限定其中一個類名。


例子:假設你有

的pkg1/SomeClass.java

package pkg1; 
public class SomeClass { 
} 

則pkg2/SomeClass.java

package pkg2; 
public class SomeClass { 
} 

Main.j AVA

import pkg1.SomeClass; // This will... 
import pkg2.SomeClass; // ...fail 

public class Main { 
    public static void main(String args[]) { 
     new SomeClass(); 
    } 
} 

如果你試圖編譯,你會得到:

$ javac Main.java 
Main.java:2: pkg1.SomeClass is already defined in a single-type import 
import pkg2.SomeClass; 
^ 
1 error 

然而,這並不編譯:

import pkg1.SomeClass; 

public class Main { 

    public static void main(String args[]) { 
     new SomeClass(); 
     new pkg2.SomeClass(); // <-- not imported. 
    } 
} 
+0

你能看看我更新的問題嗎? – Rachel 2010-10-29 20:34:17

+0

這正是我們面臨的問題,它的工作是什麼? – Rachel 2010-10-29 20:35:01

+0

更新了答案。您必須完全符合其中一個類標識符。 :-) – aioobe 2010-10-29 20:35:50

3

當然可以,但你需要區分你想要哪一個,如果兩者都包含在源文件中其他包調用它們時。

迴應評論:

com.test.package1.Foo myFoo = new com.test.package1.Foo(); 
com.test.package2.Foo myOtherFoo = new com.test.package2.Foo(); 
+0

所以這裏是我的下一個問題,我該怎麼做,因爲目前我打電話給他們,而不是指的是package2類,代碼指的是包1類。 – Rachel 2010-10-29 20:31:37

+0

@Rachel你走了。 – wheaties 2010-10-29 20:34:46

2

我被谷歌時,採取此頁我有錯誤a type with the same simple name is already defined by the single-type-import。我通過實現行import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;已悄悄進入我的進口的頂部,而我在我的進口底部有import org.apache.commons.codec.binary.Base64;行修復此錯誤(後非常長的時間)。

+0

隨着你的幫助修復了類似的錯誤。我同時導入了「java.util.logging.Logger」和「org.slf4j.Logger」。不知何故,忘記遠程第一個。 – Razorfever 2017-02-13 17:17:43