我在導航Java規則中推斷泛型類型參數時遇到了一些問題。考慮下面的類,它有一個可選的list參數:Collections.emptyList()返回一個列表<Object>?
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
而下面的變化麥ES錯誤消失:
public Person(String name) {
this.name = name;
this.nicknames = Collections.emptyList();
}
誰能解釋什麼類型的檢查規則,我對這裏跑了,最好的辦法來解決呢?在這個例子中,最終的代碼示例是令人滿意的,但是對於更大的類,我希望能夠在這個「可選參數」模式下編寫方法,而不需要重複代碼。
額外贈金:何時適合使用EMPTY_LIST
而不是emptyList()
?
對於所有Java泛型相關問題,我強烈推薦Maurice Naftalin,Philip Wadler撰寫的「[Java泛型和集合](http://oreilly.com/catalog/9780596527754/)」。 – 2008-11-20 20:39:24