[英]a code can run in eclipse, but not javac
用于代码
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>
此代码不应编译。 问题在于, new ArrayList<>(objs)
的推断类型为ArrayList<Object>
因为您已向构造函数传递了Set<Object>
作为参数。 但是ArrayList<Object>
不是List<? extends Sample>
的子类型List<? extends Sample>
List<? extends Sample>
。
更改
Set<Object> objs = new HashSet<>();
至
Set<? extends Sample> objs = new HashSet<>();
如果TypeTest是Sample
的子类型,则代码应该编译...。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.