为什么对于Base类,我会收到一个奇怪的编译错误(Eclipse):
Collections.min(Arrays.asList(new Base(), new Base()));
出现编译错误:
Type mismatch: cannot convert from List<Base> to Collection<? extends T>
- The method min(Collection<? extends T>) in the type Collections is not applicable for the arguments (List<Base>)
P.S。我知道Base类应该是Comparable的,但是编译器不会抱怨这一点……min希望将Collection作为其参数,并且Arrays.asList返回List,List是Collection。
如果我使类Base实现为Comparable,则上面的错误消失了,但是无论如何该错误都很奇怪。
答案 0 :(得分:3)
在Base
实现Comparable
之后进行编译的原因是由于Collections#min
的签名:
public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)
您会看到T
必须为Comparable
,否则将无法编译。
另一种解决方案是将显式Comparator
传递给重载方法:
public static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp)