在方法声明中使用 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 的子类型。
我想了解此 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 的子类型。