0

回答に示されているように、2 つの配列リストを連結したいと思います。

final List<String> l1 = Lists.newArrayList(...);
final List<String> l2 = Lists.newArrayList(...);
List<String> l = new ArrayList<String>() { { addAll(l1); addAll(l2); } };

このように使用してはいけないスタイル以外の理由はありますか?

4

2 に答える 2

2

既に Guava を使用している場合は、次のワンライナーを使用してこれを行うことができます。

List<String> l = FluentIterable.from(l1).append(l2).copyInto(new ArrayList<String>());

私は個人的に二重括弧が好きではありません。これにより、別の方法で初期化するためだけに新しいクラスが生成されます。新しいクラスは、より大きなターゲット jar ファイル、JVM がクラスを格納するために必要なメモリ、JIT コンパイラのより大きな継承テーブルなどを意味します。このようなアプローチをどこでも使用する場合、これは重要になります。これArrayListを別のコンポーネントに戻し、現在のコンポーネントが使用されなくなった場合 (たとえば、OSGi や他のモジュール システムを使用している場合)、ClassLoaderこの匿名クラスによってのみリンクされているハングが発生する可能性があります。また、シリアル化を気にする場合はserialVersionID、この新しいクラスで宣言する必要があります。気にしなくても、これに関する警告が表示される場合があります。

于 2015-06-15T13:15:46.243 に答える