在方法声明中使用 super

Usage of super in method declaration

我想了解此 Java 声明的作用:

public static <AnyType extends Comparable<? super AnyType>> int mymethod( AnyType x ) {
    /* ... */
}

根据我对 Java 的基本了解,我认为它所做的只是告诉您参数 x 必须是任何类型,但该类型必须扩展 Comparable?

这是一个通用方法,即它的类型参数化与 class' 参数化(如果有的话)无关。

<AnyType extends Comparable<? super AnyType>>部分是方法的通用参数化。

在声明 class 时,extends 关键字不应与 extends 关键字混淆:在这种情况下它看起来更像 "is assignable from",换句话说, IS-A

Comparable<T> 是一个接口 - 请参阅文档 here.

您的方法参数化将使您的方法接受任何参数,只要其类型实现 Comparable

具体来说,它需要是自身或任何超类型的 Comparable(这就是 super 部分的意思,与 extends 相对)。

例如,您可以传递 String 参数,因为 String 实现了 Comparable<String>(以及其他)。

您的理解是正确的。此方法表明它采用扩展 Comparable 类型的参数(请注意,为了可读性,我会调用类型参数 T 而不是 AnyType)。

现在对于Comparable<? super AnyType>>中的super,这意味着这个可比较的实现实际上可以是,例如,Comparable<Object>的一个实现,这是一个可比较的类型比作一个物体。 更一般地说,该方法接受的类型可以是 Comparable,可以与它的 超类或超接口 的某种类型进行比较 ,因此关键字 super。换句话说,可以按如下方式调用该方法:

// An object of this type can be compared to an Object
class X implements Comparable<Object> {

    @Override
    public int compareTo(Object o) {
        ...
    }


}

X x = new X();
mymethod(x);

是的,参数必须是 Comparable 的子类型。