2011-09-02 10 views
8

私は、次のように配列に変換しようとしているとき、私はList<Integer> stack = new ArrayList<Integer>(); JavaのListクラスのtoArray - なぜ "Integer"のリストを "Integer"配列に変換できないのですか?

定義:

Integer[] array= stack.toArray(); 

私はこの例外を取得:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Type mismatch: cannot convert from Object[] to Integer[]. 

なぜ?これはまったく同じ型 - Integer to Integerです。クラスはfather-and-son relation

ているとき、それは私がキャストを実行しようとしました。この一般的な場合には好きではないです:

Integer[] array= (Integer[]) stack.toArray(); 

しかし、ここで私はこのエラーを取得する:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; 

問題は何ですか?

答えて

11

erasureのため、ArrayListは実行時に汎用型を認識しないため、最も一般的なObject []のみを提供できます。 the other toArray methodを使用して、必要なアレイのタイプを指定する必要があります。

Integer[] array= stack.toArray(new Integer[stack.size()]); 
1

代わりにこれを行います。

Integer[] array = stack.toArray(new Integer[stack.size()]); 

私たちはtoArrayメソッドの引数として「シード」配列を渡す必要があります。

2

それを行う方法はこれです:

レコードの
Integer[] array = stack.toArray(new Integer[stack.size()]); 

、あなたのコードがコンパイルされない理由はだけ型消去ではありません。問題は、がObject[]を返し、ジェネリックが導入される前にこれを行ったことです。

関連する問題