2011-09-15 44 views
1

我有一個抽象類A與1方法public int get(int x, int y)如何設置將在類聲明中使用的輸入參數?

BCD具有1種方法;這些都是相同的,並且它們延伸到抽象類A

在一類Car,所述Car構造接收的字符串參數type應該用於決定哪些B一個,CD在類中使用。

顯然,我使用if...else基於type的條件聲明來執行此操作。

所以代碼看起來像

if(type.equals("B")){ 
    A = new B(); 
} else if(type.equals("C")){ 
    A = new C(); 
} //and so on.. 

有沒有我可以使用字符串參數任何優雅的方式,只是因爲它是決定3類使用哪一個?

+1

你爲什麼這樣做?這是班級任務的要求嗎?如果沒有,也許你應該告訴我們更多關於你想要解決的總體問題,而不是你試圖通過代碼解決問題的具體細節。也許有一個完全不同的,更好的方法來解決這個問題。 –

+0

不,沒有要求,我只是想知道是否有辦法做到這一點。在創建各種類之後,我只是不想在單個方法中看到很多條件語句。 – user482594

+0

即使您找到一種更優雅的方式來做同樣的事情,這種設計的味道仍然不可思議。我認爲你最好不要追求自己想要做的事情,而要解決整體設計問題。如果您仍然需要我們的幫助,那麼我們需要更多關於您要解決的問題的信息,而不是您想要解決的問題。所以這個問題不應該是「我怎麼能建立一個更好的混合物」,而是「如何完全避免這個混合物」。 –

回答

2

你可以使用接口/抽象類中構造函數的參數,而不是使用字符串初始化它。

public Car(A a) { this.a = a; } 

然後在別處:

B b = new B(); 
new Car(b); 

這就是所謂的dependency injection

+0

依賴注入 - 現在就是我所說的:解決問題的答案,而不是問題。 1+ –

+0

@Hovercraft你是否暗示我有做後者的習慣? (我真的可能是,我在回答一半的時候學習):b –

+0

是的,我衷心讚揚你這樣做! –

1

您可以使用Class.forName(String)獲得Class對象,然後使用newInstance()

相關問題