可能重複:
Why won't this generic java code compile?爲什麼這種(錯誤)使用Java泛型不能編譯?
考慮下面的代碼:
import java.util.Collections;
import java.util.List;
public class ComeGetSome {
//TODO: private final Some<?> some = new Some();
private final Some some = new Some();
public static void main(String[] args) {
new ComeGetSome().dude();
}
public void dude() {
for (String str : some.getSomeStrings()) { //FIXME: does not compile!
System.out.println(str);
}
}
}
class Some<T> {
public List<String> getSomeStrings() {
return Collections.<String> emptyList();
}
}
它不會編譯,因爲some.getSomeStrings()
返回原始List
。但方法簽名指定它返回一個List<String>
!
不知何故,它涉及Some
有一個類型聲明,但被引用爲原始類型的事實。使用對Some<?>
的引用修復了此問題。但是這個方法與類中的類型聲明無關!
爲什麼編譯器的行爲如此?
Collections.emptyList()? –
2012-01-16 23:23:04
另請參閱http://stackoverflow.com/questions/1661068/java-generics-vanishing-type-information – 2012-01-16 23:24:21