2016-03-24 12 views
0

リストから汎用オブジェクトにアクセスしたいが、常に互換性のない型エラーメッセージが出る。一般クラスのArraylist

MyGenericContainer <Cursor> cursorContainer = new MyGenericContainer<Cursor>(c); 
ArrayList <MyGenericContainer> arrayList = new ArrayList<MyGenericContainer>(); 
arrayList.add(cursorContainer); 
Cursor cursor = arrayList.get(0).getValue(); 

一般的には、一般的なオブジェクトをリストに入れて、すべての単一のオブジェクト(キャストなし)にアクセスする方法はありますか?

答えて

1

あなたはMyGenericContainerで入力されたArrayListを設定しています。したがって、コンパイラは、ArrayListMyGenericContainerObjectインスタンスで構成されることを意味します。

それを修正するためには、あなたがMyGenericContainer型の型パラメータを設定する必要があります。

List<MyGenericContainer<Cursor>> arrayList = new ArrayList<MyGenericContainer<Cursor>>(); 

あなたはJava7 +にしている場合は、あなたがダイヤモンド(<>)の利点を取ることができるが、これは

List<MyGenericContainer<Cursor>> arrayList = new ArrayList<>(); 
+0

私はダイアモンド演算子を使用できると付け加えたいと思うかもしれません。タイプ情報を繰り返す必要はないことを意味する。 – GhostCat

+0

ありがとう、@Jägermeister、私はします。 –

+0

ありがとうございます。しかし、私は一般的に、私のリストには異なるクラスのオブジェクトを置く必要があります: 'new ArrayList arrayList = new ArrayList(); arrayList.add(new String()); arrayList.add(new Integer()); int a = arrayList.get(1); //キャストする必要があります。 ' この回避策はジェネリック(キャストなし)で解決したいです。 – logerom

3

arraylistの作成中に何か不足していませんか?

このような変更をし、正常に動作する必要がありますが、私は考えます:

ArrayList <MyGenericContainer<Cursor>> arrayList = new ArrayList<MyGenericContainer<Cursor>>(); 
関連する問題