compareTo(E) 泛型

compareTo(E) generics

您好,我对泛型有疑问。我需要使方法 "max" 通用,以便它可以用于不同类型的集合。

但我收到一个无法与 E 比较的错误

public static <E> E max(List<E> list) {
    Iterator<E> iterator = list.iterator();
    E maximum = iterator.next();
    while (iterator.hasNext()) {
        E x = iterator.next();
        if (maximum.compareTo(x) < 0) {
            maximum = x;
        }
    }
    return maximum;
}

您必须要求 E 才能实施 Comparable<E>:

public static <E extends Comparable<E>> E max(List<E> list) {
    Iterator<E> iterator = list.iterator();
    E maximum = iterator.next();
    while (iterator.hasNext()) {
        E x = iterator.next();
        if (maximum.compareTo(x) < 0) {
            maximum = x;
        }
    }
    return maximum;
}

这让编译器知道只有 List 实现 Comparable 的元素可以传递给该方法。

@Eran 的答案对于您的用例来说可能已经足够好了,但是 max 函数的更灵活的签名是

static <E extends Comparable<? super E>> E max(List<E> list)

因此 Circle class 扩展 Shape class 实现 Comparable<Shape> 也可以。