- ベストアンサー
インスタンス化の条件分けについて
標準入力(文字列)の値によってインスタンス化をするときの型を 条件分けすることは可能でしょうか? 具体的にあらわすと 「ABC」を入力したときは ABC al = new ABC() 「BCD」を入力したときは BCD al = new BCD() のような感じです。 もしこれが可能であれば、条件分けするための構文もできたら添えていただきたいです。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
「インスタンス化の条件分け」はできないんじゃないかな? 「インスタンス化されたものを条件によって引っ張ってくる」事はできると思いますが。 public class AnInstance{ private String Key; private Object al; public AnInstance(String key, Object al){ this.key = key; this.al = al; } public String getKey(){ return this.key; } public Object getObject(){ return this.al; } } public class Instances{ private static AnInstance[] objs; static{ objs = new AnInstanse[] { new AnInstance("ABC", new ABC()), new AnInstance("BCD", new BCD()) }; } public static AnInstance[] getInstances(){ return this.Objs; } } main(略){ Object al = null; for(int i=0; i<Instances.getInstances.length;i++){ if(Instances.getInstances[i].getKey().equals("ABC")){ al = Instances.getInstances[i].getObject(); break; } } // この例だとABCクラスのインスタンスがalになるので、その処理 } みたいな。
その他の回答 (5)
No1.です paramは、標準入力(文字列)の値のことです。 文脈からそれも読み取れないということは、相当の初心者じゃないでしょうか? ここは、問題をやってもらう場ではありません。 まずは、Javaを理解してからお越し下さい。
- osumitan
- ベストアンサー率33% (102/307)
入力値がそのままクラス名になるなら、こんな手もありますね。 すごーーく雑なサンプルですが、こんな感じで。 ----- String fqcn = "ABC"; Class cls = Class.forName(fqcn); Object obj = cls.getConstructor(null).newInstance(null); ----- これで『Object obj = new ABC();』と同じ動きになります。 fqcnにクラス名をどうにかして入れてください。 クラスにパッケージがあればフル(FQCN)で。 次にそのクラスのClassオブジェクトを生成します。 そしてClassオブジェクトからコンストラクタを取り出し、 そいつを実行してインスタンスを生成します。 (この例では引数なしのコンストラクタを呼んでいます) "ABC"を"BCD"にすればBCDのインスタンスが作られますし、 生成したいクラスの種類が増えても問題ないです。 実際にはthrowされる例外も拾ってエラー処理しなきゃダメですし 細かいことはAPIドキュメントを参照してください。
- PED02744
- ベストアンサー率40% (157/390)
ANo.3です。 ちなみにわずもがなですが、下記のソースは未確認です。 あくまでも参考ってことで。 どうせあそこまでするなら、普通HashMapにするだろ~って話もありますし(笑)
- bgbg
- ベストアンサー率53% (94/175)
抽象クラスかインターフェースを使ってください。 Javaの基本概念ですから、御自分で本を読むなり検索するなりで勉強してください。
if ("ABC".equals(param)) { ABC al = new ABC(); } if ("BCD".equals(param)) { BCD al = new BCD(); }
お礼
早速のご回答ありがとうございます。 paramは初めて聞いたのでこのプログラムは私には解読不能でした。 せっかくご解答してくださったのに申し訳ありません。
お礼
早速のご回答ありがとうございます。 何となく流れは分かりましたがobjectについて無知でしたので こちらも解読不能でした。 詳しくご回答していただいたのですがすみません。