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接口而不是作为接口本身实现?
答案 0 :(得分:2)
此处未扩展Comparable
接口。
<T extends Comparable<T>, V extends T>
是具有类型边界的泛型类型参数。这意味着isIn
方法有两个泛型类型参数 - 其中一个名为T
,必须实现Comparable<T>
,另一个名为V
,必须是子类型T
。
顺便说一句,您的具体方法不需要V
和T
来实施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
)。
要声明上限通配符,请使用通配符(
?
), 后跟extends
关键字,后跟上限。 请注意,在此上下文中,extends
在一般意义上用于表示&#34; extends&#34; (如在课堂上)或&#34;实施&#34; (如在接口中)。