2016-09-10 14 views
1

最近、配列のArrayListを2次元配列に型キャスト/変換する際に問題が発生しました。私が働いていた配列リストの配列をJavaの2d配列

List<Object[]> arrayList; 
// initialize and fill the list of arrays 
// all arrays have the same length 
Object[][] array2d = arrayList.toArray(new Object[][] {}); 

を使用するように私に言った、このサイト上で答えを見つけましたが、私は少しのためにそれをGoogleで検索し、それが悪い習慣をconseideredされていることをどこかで読みました。私はまだそれを使用しました、それは実際に働いた唯一の一行の変種でした。

実際にはどういう意味ですか、なぜそれが悪いと思われるのですか?私は[][]{}ビットを理解していません。空の場合はObject[][].toArray()メソッドに渡すと思いますか?

+0

それだけで完全を期すため、悪い習慣と言った質問をリンクするのが良いでしょう。 – nhouser9

答えて

0

あなたの例が悪い習慣とみなされる理由は何も見つかりません!

1

私が見る唯一のことは、配列を作成するがそれを使用しないことです。

一つのJavadocあなたが見ることができます:

は(最初の要素から最後の要素へ)適切な順序でリスト内のすべての要素を含む配列を返します。返される配列の実行時の型は、指定された配列の実行時の型です。リストが指定された配列に収まる場合は、リストに戻ります。そうでない場合は、指定された配列の実行時の型とこのリストのサイズで、新しい配列が割り当てられます。

そしてそれは、メソッドのソースコードを確認することができます:

@SuppressWarnings("unchecked") 
public <T> T[] toArray(T[] a) { 
    if (a.length < size) 
     // Make a new array of a's runtime type, but my contents: 
     return (T[]) Arrays.copyOf(elementData, size, a.getClass()); 
    System.arraycopy(elementData, 0, a, 0, size); 
    if (a.length > size) 
     a[size] = null; 
    return a; 
} 

だから何あなたが作成していることは、空の配列で、この方法は、別のものを作成します。

Object[][] array2d = arrayList.toArray(new Object[arrayList.size()][]); 

については、[][]{}とお考えください。

いくつかのヒント here