私はJavaアプリケーションを開発中です。これは、抽象クラスのModelと2つの派生クラスModel 1とModel 2です。Model1とModel2の動作が異なりますので、ユーザーが2つのモデルからモデルを選択できるようにします。今、これに伴う問題は、私は新しいクラスのMODEL3を追加した場合、私はコードを書き換える必要があること、であるJava、クラスタイプのリスト
Model model;
If(response==1){
model = new Model1();
}else if(response==2){
model = new Model2();
}
: 次のように実装することができます。 リストを作成して、各クラスのインスタンスを追加した後、クラスの新しいインスタンスを返す静的メソッドを追加しましたが、それ以上のスタイルで少しでもできることを願っています。
各クラスのタイプを保持するために、リストを作成することは可能ですか?このリストから、モデルを選択するためのメニューを作成し、そのタイプを使用してユーザーが必要とするクラスを作成することができます。
したがって、List<Class>
を作成してから、クラスオブジェクトをコンストラクタとして使用して、指定されたクラスのインスタンスを作成することは可能ですか?あなたはそれが公共の引数なしのコンストラクタを持っていることを確信している場合
+1は反射を使用しないためです。時には、コンパイル時にクラスを知らないのであれば、例えば –
@StevenSchlanskerのように、リフレクションの用途があることに同意する必要があります。私はそれをJavaオブジェクトシステムと他のシステム(ファイルシステム、ORM、組み込みスクリプト言語)の境界に限定することを好みます。 Java内で完全に作業している場合は、メンテナがコードをリファクタリングしたり、プログラムの流れに従うなどの機能に影響を与えない、より良い使い方がしばしばあります。 –