文字列のList
を作成するための最適な構成は何ですか? Lists.newArrayList()
(グアバから)またはnew ArrayList()
ですか?
個人的な好みですか?
またはそれは単なる型ジェネリック型推論ですか?
またはLists.newArrayList()の使用に理論的または実用的な価値はありますか?
Guava builderは、型引数を複数回入力する手間を省きます。比較する:
List<Foo<Bar, Baz>> list = Lists.newArrayList();
List<Foo<Bar, Baz>> list = new ArrayList<Foo<Bar, Baz>>();
Java 7では、ダイヤモンド演算子を使用しているため、少し時代遅れです。
List<Foo<Bar, Baz>> list = new ArrayList<>();
グアバのソース から:
public static <E> ArrayList<E> newArrayList() {
return new ArrayList<E>();
}
実行しているのは、型推論を許可することだけです。実行時に違いはありません。
1つ追加しますオーバーロード Lists.newArrayList()のバージョンがより便利です:
Lists.newArrayList(E... elements)
Lists.newArrayList(Iterable<? extends E> elements)
Lists.newArrayList(Iterator<? extends E> elements)
new ArrayList()
よりも便利な関数を提供します。
例えば:new ArrayList()
はできません:
Lists.newArrayList("a","b");
Lists.newArrayList(anIterable);
これがLists.newArrayListの機能です。
@GwtCompatible(serializable = true)
public static <E> ArrayList<E> newArrayList() {
return new ArrayList<E>();
}
したがって、これら2つは基本的に同じであり、newArrayListを使用すると、ジェネリック型を複製する必要がないという利点があります。これは、複雑なジェネリックで非常に役立ちます。
List<Map<X,List<Y>> list = new ArrayList<Map<X,List<Y>>();
List<Map<X,List<Y>> list = Lists.newArrayList();
here で説明したように、Lists
、Sets
などを使用する主な動機は、コードの可読性/複製を改善し、型推論を行うことです。
オーバーロードされたコンストラクターのJava 8アプローチ。
Guavaのオーバーロードコンストラクターを使用する場合は、Java 8 Stream Builder。
List<String> listTest = Stream.<String>builder.add("Hello").add("My Name").add("Blah").build().collect(Collectors.toList());
前述のように、Java 7はこれを廃止しますが、リスト、セット、マップなどを後で簡単に変更できるようにするため、ファクトリメソッドを使用します。