为什么Collections.min(Arrays.asList(new Base(),new Base()))给出奇怪的编译错误(Eclipse)?

时间:2018-07-13 16:37:14

标签: java eclipse collections compiler-errors

为什么对于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,则上面的错误消失了,但是无论如何该错误都很奇怪。

1 个答案:

答案 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)