代码
import java.util.*;
interface Sample{
}
public class TypeTest implements Sample{
public static void main(String[] args) {
Set<Object> objs = new HashSet<>();
objs.add(new TypeTest());
List<? extends Sample> objList = (List<? extends Sample>) new ArrayList<>(objs);
for (Sample t : objList) {
System.out.println(t.toString());
}
}
}
它可以在eclipse中运行并输出TypeTest@7852e922
,但javac
会出错:
incompatible types: ArrayList<Object> cannot be converted to List<? extends Sample>
答案 0 :(得分:3)
此代码不应编译。问题是推断的new ArrayList<>(objs)
类型是ArrayList<Object>
,因为您已将Set<Object>
作为参数传递给构造函数。但ArrayList<Object>
不是List<? extends Sample>
的子类型。
更改
Set<Object> objs = new HashSet<>();
到
Set<? extends Sample> objs = new HashSet<>();
并且代码应该编译...假设TypeTest是Sample
的子类型。