我试图更普遍地找到列表的最大值。我应用了通配符。
public class Main{
public static void main(String[] args){ }
public static <T extends Comparable<? extends T>> T max(Collection<? extends T> c){
T max= c.iterator().next();
for(T element : c){
if(element.compareTo(max)>0) max=element;//Compile error
}
return max;
}
}
编译器给了我错误信息:
incompatible types: T cannot be converted to CAP#1
where T is a type-variable:
T extends Compareble<? extends T> declared in method <T>max(Collection<? extends T>)
where CAP#1 is a fresh type-variable:
CAP#1 extends T from capture ? extends T
我对此错误消息有一些疑问
什么是新鲜类型变量?在 JLS 4.1 中写到Java 编程语言中有两种类型:原始类型和引用类型,还有一种特殊的 null 类型,即表达式的类型 null
,它没有名称。
什么是 CAP#1 新类型变量?