ジェネリック型パラメーターを推論するためのJavaのルールをナビゲートするのに問題があります。オプションのリストパラメータがある次のクラスを考えてみます。
import java.util.Collections;
import java.util.List;
public class Person {
private String name;
private List<String> nicknames;
public Person(String name) {
this(name,Collections.emptyList());
}
public Person(String name,List<String> nicknames) {
this.name = name;
this.nicknames = nicknames;
}
}
私のJavaコンパイラーは次のエラーを出します:
Person.java:9: The constructor Person(String, List<Object>) is undefined
しかし、ではなくCollections.emptyList()
タイプを返します。キャストを追加しても役に立たない<T> List<T>
List<Object>
public Person(String name) {
this(name,(List<String>)Collections.emptyList());
}
収量
Person.java:9: inconvertible types
のEMPTY_LIST
代わりに使用emptyList()
public Person(String name) {
this(name,Collections.EMPTY_LIST);
}
収量
Person.java:9: warning: [unchecked] unchecked conversion
次の変更により、エラーが解消されます。
public Person(String name) {
this.name = name;
this.nicknames = Collections.emptyList();
}
私がここで実行しているタイプチェックルールと、それを回避する最善の方法を誰かが説明できますか?この例では、最後のコード例で十分ですが、クラスが大きい場合は、コードを複製せずに、この「オプションのパラメーター」パターンに従ってメソッドを記述できるようにしたいと思います。
追加のクレジットの場合:EMPTY_LIST
ではなく、emptyList()
いつ使用するのが適切ですか?