2017-04-12 2 views
0

List <T> .toArray()がT []の代わりに汎用Object []を返すのはなぜですか?たとえば

List<String> items = new ArrayList<String>(); 
String[] aItems = items.toArray(); // type error, because toArray() returns Object[] 

は、私は、これはそれがある方法であることを理解し、それを変更することはできません。もちろんStringにキャストすることもできますが、その背後にあるアイデアは何ですか?これはJavaの「バグ」ですか、それともその理由がありますか?

答えて

5

柔軟性。

引数を渡さないでtoArray()メソッドはObject[]を返します。

現在、どのタイプが予期されているのか、そしてメソッドの作成者は、タイプ消去のために実行時にどのタイプの配列が返されるのかわからないことが多い理由があります。そこで、彼らはちょうどそれがObjectあるすべてのオブジェクトのスーパータイプであるとすると、あなたのタイプを指定したい場合は、Object[]

を返す理由です、彼らは良いですし、あなたの特定のタイプを返す:)

String[] aItems= items.toArray(new String[0]); 
+1

'items.toArray(new String [items.size()])'を使用して、追加の配列オブジェクトの割り当てを防止します。配列のサイズが 'List'サイズに等しい場合、' items'要素は指定された配列にコピーされ、メソッドはその配列を返します。新しく作成された配列は返しません。 – Lennier

+0

私はまだ表示されない理由がわかりません().toArray()はT []を返しますか?どのように他のものを返すことができるのか分かりません。 – nagylzs

+0

ああ、私は今参照してください。あなたはそれをそのように宣言することはできません。まあ、私は正当な理由としてそれを見ません。私はそれを言語の壁として見る。 – nagylzs

関連する問題