2011-09-15 4 views
1

私は、抽象クラスAを1つのメソッドpublic int get(int x, int y)と呼んでいます。クラス宣言で使用されるInput引数はどのように設定できますか?

クラスBCDはすべて同じで、抽象クラスAに拡張された1つのメソッドを持っています。クラスCar

Carコンストラクタは Bの1、 CDはクラスで使用されなければならないかを決定するために使用されるべき文字列引数 typeを受けます。

明らかに、私はtypeに基づいてif...else条件文を使用しています。

ので、コードが

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

のように見える、私はそれが3クラスの一つを使用するかを決定することであると同じように文字列引数を使用することができます任意のエレガントな方法はありますか?

+1

なぜこのようなことをしていますか?これはクラス割り当ての要件ですか?そうでない場合は、解決しようとしている全体的な問題について、コードで解決しようとしている方法の詳細を教えてください。おそらく、これに取り組むには完全に異なる、より良い方法があります。 –

+0

いいえ、要件はありません、私はちょうどそれを行う方法があるのだろうかと思っています。さまざまなクラスを作成した後、単一のメソッドで多くの条件文を見たくないだけです。 – user482594

+0

同じデザインをより洗練された方法で見つけたとしても、このデザインは意地悪な香りです。私は、あなたがしようとしていることを追求しなくてもいいし、代わりに全体的な設計の問題を解決する方が良いと思う。まだ援助が必要な場合は、どのような問題を解決しようとしているのではなく、解決しようとしている問題に関する詳細情報が必要です。だから問題は「どうすればよりよいkludgeを作ることができるのか」ではなく、「どのようにこのkludgeを完全に避けることができるか」である。 –

答えて

2

を使用して、それをインスタンス化するためにClass.forName(String)を使用することができます。

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

そして他の場所は:

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

これはdependency injectionと呼ばれています。

+0

依存性注入 - これは私が話していることです:問題を解決する答えではなく、問題です。 1 + –

+0

@ホバークラフトは私が後者をする癖があることを意味していますか? (真実は私がおそらくやっているのですが、私は半分の時間に答えながら学習しています。):b –

+0

はい、私は心からそうすることをお勧めします! –

1

あなたはClassオブジェクトを取得し、あなたが代わりに文字列を使用してのコンストラクタで引数としてインタフェース/抽象クラスを使用することができnewInstance()

関連する問題