在方法声明中使用super

时间:2016-03-22 11:56:03

标签: java generics methods super

我想了解这个Java声明正在做什么:

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

根据我对Java的基本知识,我认为它所做的只是告诉你param x必须是任何类型的,但该类型必须扩展Comparable?

3 个答案:

答案 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的子类型。