- - PR -
【質問】クラス名の動的取得について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-11-24 18:03
Class callClass = Class.forName(クラス名);
Object infoObject = callClass.newInstance(); AAA aaa = (AAA)infoObject; 上記で作成したインスタンスを、動的に変化する「Class.forName(クラス名)」別に AAA部分を指定したいのですが、可能でしょうか? 例) Class.forName(info.data);のときは、 AAA aaa = (AAA)infoObject; Class.forName(info.temp);のときは、 BBB aaa = (BBB)infoObject; やりたいことは、Class.forNameの与えられた引数によって、 見るクラスを分けたいのです。 初心者のため、伝わりにくい点もあるかと思いますが、 なにとぞ宜しくお願いします。 | ||||
|
投稿日時: 2004-11-24 18:41
望ましくないですが
Object infoObject = callClass.newInstance(); if( infoObject instanceof AAA ){ AAA aaa = (AAA)infoObject; }else if( infoObject instanceof BBB ){ BBB bbb = (BBB)infoObject; } | ||||
|
投稿日時: 2004-11-24 18:52
javaはキャストそのものを動的に行うことはできません。
ですので、必要なだけキャストの処理を静的に記述しなければいけません。 当然、その後の処理も必要なだけinstanceofで分岐しなければいけません。 しかし型に互換性を持たせれば、その型にキャストするだけでよいので、 特に分岐する必要はありません。 下のソースを参考にしてみてください。
| ||||
|
投稿日時: 2004-11-24 20:27
どうしてもそうしなければならない理由がないのであれば、
設計を見直したほうが良いと思います。 共通のインターフェイスCCCを作ってAAAやBBBにimplementsし、 挙動の違いはポリモーフィズムで実現すべきでしょう。 | ||||
|
投稿日時: 2004-12-12 05:02
みなさん、ご返信ほんとうにどうもありがとうございました。m(._.)m
実際にとった方法ですけれども、 みなさんのおっしゃるとおり、 インターフェイスをつくって、AAAとBBB内それぞれに 同じメソッド名をつくって対処しました。 ありがとうございました。 |
1