2015-11-06 77 views
0

現在我遇到了一些問題。我正在寫一個轉換函數,假設我想將一種類型的卡(一個類)轉換爲另一種類型(另一個類)。如何用兩個具有相同名稱的類在Java中導入

假設一個是foo.bar.Card,另一個是baz.banan.Card。我可以有一個

import foo.bar.Card; 

,但我不能這樣做

import foo.bar.Card; 
import baz.banan.Card; 

爲那麼編譯器不能告訴他們分開。

我只能做其中的一個,然後在其他的前綴,所以我有我的代碼中的卡和baz.banan.Card,但我想避免有很長的名字。理想情況下,我想使用bar.Card和banan.Card,但這是可能的,如果是這樣的話?

+0

我能想到的唯一方法就是將其中一個包裝成一個命名不同的虛擬類! – ParkerHalo

+1

我認爲那是沒有辦法的。 :( – Shivam

+0

正如在[這個答案](http://stackoverflow.com/a/7193475/2773311)中提到的,如果你不需要訪問'static'變量和函數,你可以擴展其中的一個 – Arc676

回答

4

你有2種選擇:

  1. 你的類重命名爲唯一的名稱
  2. 使用完全合格的名稱,請參閱您的類名:

    foo.bar.Card card = new foo.bar.Card(); 
    baz.banan.Card otherCard = new baz.banan.Card(); 
    

另一種選擇,如whaleberg建議,是創建一個名稱不同的包裝類。

+0

他明確地說他不希望在對象前面添加前綴以避免產生很長的名字 – ParkerHalo

+0

1.在我的情況下,這不是一個選項2.這就是我不想做的事 – liftarn

+0

然後沒有辦法讓這些類保持分開。編譯器應該怎麼知道,當你編寫'Card'時,你的意思是包X,而在另一個情況下,如果你不提供完全限定的名稱,則包Y?有時你想避免某些事情,但如果設計不允許,你的選擇是有限的 – Stefan

1

不幸的是,他們並不是真的做到這一點。

我不知道兩個比較有用的解決方法:

final類

Card類與調用Card對象的方法完全相同的方法之一創建一個包裝類。不幸的是這不是一個非常優雅的方法。

可變類

創建一個CardA類,它擴展Card和使用CardA爲您Card類。

不幸的是,這些只是你的兩個選擇。如果這些不起作用,您將不得不使用完全限定的名稱。

相關問題