5

重複の可能性:
List<String>.toArray() が String[] ではなく Object[] を返すのはなぜですか? これを回避する方法は?

このコード例を参照してください:

    List<String> list = new ArrayList<String>();
    list.add("hello");
    list.add("world");
    Object [] array = list.toArray();

toArray()メソッドが の配列を返すのはなぜObjectですか? などの他のListメソッドは、リスト内のオブジェクトのタイプを返すことができます。get()remove()

4

5 に答える 5

4
Because array has been in Java since the beginning, while generics
were only introduced in Java 5. And the List.toArray() method was 
introduced in Java 1.2, before generics existed, so it was
specified to return Object[].

Collection.toArray(T[] a)toArray(T[] a)を見てみましょう

于 2012-06-13T04:47:45.457 に答える
1

toArray(String[] a)文字列型の配列または基本的に指定された型の配列を返すものを使用できます。toArray メソッドは、コレクション ベースの API とリスト ベースの API の間のブリッジとして機能するため、オブジェクトを返します。

于 2012-06-13T03:59:24.180 に答える
0

ジェネリックにするためにオブジェクトを返すと思います。メモリ割り当ての問題に対処する必要がある可能性が最も高いです。オブジェクトの配列を割り当てるために、システムは正確な型を知る必要はありません。get と remove では 1 つのアイテムしか返されないため、これに遭遇することはありません。

しかし、誰かが私の答えを確認したり、私を修正したりできることを願って、私はあなたの質問に賛成票を投じます.

于 2012-06-13T03:57:23.137 に答える
0

Java List#toArrayで説明されています。

于 2012-06-13T03:57:31.187 に答える
0

toArray()新しい配列オブジェクトを作成して埋める必要があります。しかし、実行時のジェネリック型消去 toArray()のために、要素の実際の型が何であるかがわかりません。そのため、Object ( Object[]) の配列が作成されます。<T> T[] toArray(T[] a)型付き配列が必要な場合に使用します。

于 2012-06-13T04:05:46.353 に答える