• ベストアンサー

インスタンス化の条件分けについて

標準入力(文字列)の値によってインスタンス化をするときの型を 条件分けすることは可能でしょうか? 具体的にあらわすと 「ABC」を入力したときは ABC al = new ABC() 「BCD」を入力したときは BCD al = new BCD() のような感じです。 もしこれが可能であれば、条件分けするための構文もできたら添えていただきたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

「インスタンス化の条件分け」はできないんじゃないかな? 「インスタンス化されたものを条件によって引っ張ってくる」事はできると思いますが。 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になるので、その処理 } みたいな。

sunoftaiyo
質問者

お礼

早速のご回答ありがとうございます。 何となく流れは分かりましたがobjectについて無知でしたので こちらも解読不能でした。 詳しくご回答していただいたのですがすみません。

その他の回答 (5)

noname#49428
noname#49428
回答No.6

No1.です paramは、標準入力(文字列)の値のことです。 文脈からそれも読み取れないということは、相当の初心者じゃないでしょうか? ここは、問題をやってもらう場ではありません。 まずは、Javaを理解してからお越し下さい。

  • osumitan
  • ベストアンサー率33% (102/307)
回答No.5

入力値がそのままクラス名になるなら、こんな手もありますね。 すごーーく雑なサンプルですが、こんな感じで。 ----- 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)
回答No.4

ANo.3です。 ちなみにわずもがなですが、下記のソースは未確認です。 あくまでも参考ってことで。 どうせあそこまでするなら、普通HashMapにするだろ~って話もありますし(笑)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.2

抽象クラスかインターフェースを使ってください。 Javaの基本概念ですから、御自分で本を読むなり検索するなりで勉強してください。

noname#49428
noname#49428
回答No.1

if ("ABC".equals(param)) { ABC al = new ABC(); } if ("BCD".equals(param)) { BCD al = new BCD(); }

sunoftaiyo
質問者

お礼

早速のご回答ありがとうございます。 paramは初めて聞いたのでこのプログラムは私には解読不能でした。 せっかくご解答してくださったのに申し訳ありません。

関連するQ&A