可能重复:
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