这个有效的泛型方法在java中怎么样?

时间:2017-07-02 11:25:09

标签: java generics interface

class GenMethDemo {
// Determine if an object is in an array.

static <T extends Comparable<T>, V extends T> boolean isIn(T x, V[] y) {
     for(int i=0; i < y.length; i++)
         if(x.equals(y[i])) return true;
   }
}

如何扩展Comparable接口而不是作为接口本身实现?

2 个答案:

答案 0 :(得分:2)

此处未扩展Comparable接口。

<T extends Comparable<T>, V extends T>是具有类型边界的泛型类型参数。这意味着isIn方法有两个泛型类型参数 - 其中一个名为T,必须实现Comparable<T>,另一个名为V,必须是子类型T

顺便说一句,您的具体方法不需要VT来实施Comparable,因为它不会调用compareTo

但是,如果您将代码更改为:

,则需要它
static <T extends Comparable<T>, V extends T> boolean isIn(T x, V[] y) {
     for(int i=0; i < y.length; i++)
         if(x.compareTo(y[i]) == 0) return true;
     return false;
}

然后,您只能使用实现Comparable的参数调用此方法。

例如:

if (isIn ("str",new String[]{"a","b","c"})) {

}

答案 1 :(得分:0)

extends< ... >的含义与其有些不同 正常意义(如class FileInputStream extends InputStream)。

引自教程Upper Bounded Wildcards

  

要声明上限通配符,请使用通配符(?),   后跟extends关键字,后跟上限。   请注意,在此上下文中,extends在一般意义上用于表示&#34; extends&#34; (如在课堂上)或&#34;实施&#34; (如在接口中)。