5

List.toArray() が一般的でないのはなぜですか? なぜ型を引数として与えなければならないのですか (そして通常は新しい空のインスタンスを作成します)?

public Object[] toArray()

http://docs.oracle.com/javase/7/docs/api/java/util/List.html#toArray()


更新: ジェネリック配列の作成が許可されていないことを知りましたが、許可されるべきだと思います。許可されない理由はありますか?

Main.java:28: error: generic array creation
        T[] ret = new T[size()]; 

http://ideone.com/3nX0cz


更新:わかりました、これが答えだと思います:

http://docs.oracle.com/javase/tutorial/java/generics/restrictions.html#createArrays

直接関係があるからではなく、間接的に関係があるからです。に変換されるnew T[size()], where には本質的に問題はありませんが、 T 自体がパラメーター化された型になる可能性があります。そのため、 を作成すると、が等しくなり、コンパイラが を作成しようとするため、リンクが返されたときに問題が発生する可能性があります。誰かがこれらの線に沿って答えようとしましたが、その答えはその後削除されたため、誰だったか忘れてしまいました。MyList<String>new String[size()]MyList<Set<Integer>>TSet<Integer>new Set<Integer>[size()]

4

3 に答える 3

4

このメソッドは、新しい配列を作成することになっています。しかし、 のClass情報がなければT、それはできません。

あなたは言うことができませんT[] array = new T[list.size()];

配列をパラメーターとして (他の方法のように) 渡す場合、問題はありません。

于 2013-10-15T18:43:30.873 に答える