- 締切済み
お世話になります。下記のjavaの総称を詳しい方がいらっしゃいましたら
お世話になります。下記のjavaの総称を詳しい方がいらっしゃいましたら、ぜひ教えてお願いします。 Class A{ private HashMap dataTable; private void a1(){ ArrayList its = (ArrayList)(dataTable.get(key1)); if (its==null){ its = new ArrayList(); its.add(new B) } ... dataTable.put(key1,its); } private void b1(){ ArrayList its = (ArrayList)(dataTable.get(key3)); if (its==null){ its = new ArrayList(); its.add(new C()) } ... dataTable.put(key4,its); } } B、Cはぞれぞれ違うObjectです。 JDK5をアップすると、HashMap,ArrayListの無検査呼びコンパイラ警告があって、総称に改修したいですが、改修するやり方をご存知の方がいらっしゃいましたら、ぜひ教えてくださいまして、非常に助かります。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
> 「ElemType」ってのパッケージを教えていただけませんか。 ElemTypeは単なる例なので、クラス名もパッケージ名も質問者さんの好きなように決めてください。ANo.1に書いたとおり、クラスBとCの共通の親クラスまたはインターフェースになっていればいいです。 新しいクラスやインターフェースを追加するのが嫌ならば、ElemTypeと書いてあるところを全てObjectにするのでも構いません。
- salsberry
- ベストアンサー率69% (495/711)
BのArrayListやCのArrayListがHashMapの中に入っているということですか。 private HashMap<KeyType,ArrayList<ElemType>> dataTable; ArrayList<ElemType> its = dataTable.get(key1); if (its==null) { its = new ArrayList<ElemType>(); its.add(new B()); } ... dataTable.put(key1,its); ... ElemType elem = its.get(index); B b = (B)elem; 警告を消すだけならこんな感じ。KeyTypeはdataTableのキーの型、ElemTypeはクラスBとCの共通の親クラスまたはインターフェース。 ただし、ArrayListから取り出したElemTypeのオブジェクトをBやCのオブジェクトとして区別して扱おうとすると、その部分にキャストが残ってしまいます。 理想的には、要素型の異なるArrayListをHashMapの中に混在させないように設計を変えたほうがいいです。
お礼
salsberryさん ご回答ありがとうございました。 ひとつの質問ですが、「ElemType」ってのパッケージを教えていただけませんか。 ご指摘のように異なるArrayListをHashMapに混在させないように設計の変更したほうがいいと思っていますが。現在業務が変わらなく、Javaバージョンアップのみ、できるだけプログラムに対して、大きく修正を入るのは避けたいので、 よろしくお願いいたします。
補足
大変失礼しました。 ElemTypeってのパッケージを見逃しちゃいました。 やってみます。 どうもありがとうございました。