我想了解这个Java声明正在做什么:
public static <AnyType extends Comparable<? super AnyType>> int mymethod( AnyType x ) {
/* ... */
}
根据我对Java的基本知识,我认为它所做的只是告诉你param x必须是任何类型的,但该类型必须扩展Comparable?
答案 0 :(得分:3)
您的理解是正确的。此方法指示它采用扩展Comparable
的类型的参数(请注意,为了便于阅读,我会调用类型参数T
而不是AnyType
。)
现在对于super
中的Comparable<? super AnyType>>
,这意味着这种可比较的实现实际上可以是,例如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);
答案 1 :(得分:0)
这是一种通用方法,即其类型参数化与类&#39;无关。参数化,如果有的话。
<AnyType extends Comparable<? super AnyType>>
部分是该方法的通用参数化。
在声明某个类时,不应将extends
关键字与extends
关键字混淆:在这种情况下,它看起来更像&#34;可以从&#34;分配,换句话说,<强> IS-A 即可。
Comparable<T>
是一个界面 - 请参阅文档here。
您的方法参数化将使您的方法接受任何参数,只要其类型实现Comparable
。
具体来说,它需要是Comparable
本身或任何超类型(super
部分的含义,而不是extends
)。
例如,您可以传递String
参数,因为String
实现了Comparable<String>
(等等)。
答案 2 :(得分:0)
是的,参数必须是Comparable的子类型。