2017-05-26 9 views
-2

私はリストの異なるタイプのアップミックスするリストの一般的な配列を作成するには、次のコードを使用していた。Generic Arrayの使用中に例外が発生しますか?

List<Integer>[] intLists = (List<Integer>[])new List[] {Arrays.asList(1)}; 
List<? extends Object>[] objectList = intLists; 
objectList[0] = Arrays.asList(1.01); 
int n = objectList[0].get(0); // class cast exception! 

をしかし、それは私のキャスト例外を与えました。 どうすればこの問題を回避できますか?

+0

この行は何を理解していますか?<? extends Object> []オブジェクトリスト= intLists; ?あなたはまだリストを使用しています

+4

コンパイルされていないので、そのコードはあなたにClasscastExceptionを与えることはできません。 –

答えて

1

を、私はそれが明らかにリストの生の配列を作成しているが、それを格納しながら、これはコンパイルエラーを与えた場合、コンパイラは、その配列いることを検出することができないようでわかりませんリスト(それはリストの型を検出することはできません - おそらく単にそれを生のリストとして解釈する)ので、エラーをスローしませんし、整数に要素を取得しようとすると、doubleをint型にキャストしようとすると失敗します。これは正しい使用法ではありません。

私はあなたが(Integer) listArray[0].get(0)を行うことができると信じていますが、浮動小数点の精度を失う原因になります。

0

objectList [0] .get(0);の型です。 Doubleなのでintに変換する必要があります。 次作品:

int n = ((Double) objectList[0].get(0)).intValue(); 

しかし、あなたは、あなたのコードは非常に良いではない場合を用途に応じて。

0

整数変数にdouble値を格納しようとしています。あなたはそれをすることはできません。だから、代わりに二重に格納します。

 List<Integer>[] intLists = (List<Integer>[])new List[] {Arrays.asList(1)}; 
     List<? extends Object>[] objectList = intLists; 
     objectList[0] = Arrays.asList(1.01); 
     double n = (double) objectList[0].get(0); // Make it a double :) 
+0

'int'として格納する必要がある場合、これは質問に答えません。 – bradimus

関連する問題