gpt4 book ai didi

java - 具有边界的泛型与具有泛型类型的接口(interface)

转载 作者:行者123 更新时间:2023-12-04 05:12:42 27 4
gpt4 key购买 nike

考虑以下代码

/**
* Generic method with bounds
*/
public static <T> int countGreaterThan(Comparable<T>[] anArray,
T elem) {
int count = 0;
for (Comparable<T> e : anArray)
if (e.compareTo(elem) > 0)
++count;
return count;
}
/**
* Alternative to above
*/
public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) {
int count = 0;
for (T e : anArray)
if (e.compareTo(elem) > 0)
++count;
return count;
}

看起来两者在功能上是相同的。但是,它们可以出现在同一个类中,显然彼此重载。当我使用以下代码时,似乎调用了第二种方法。如果没有第二个重载方法,则调用第一个方法。有人可以提供深入的解释吗?
    Integer[] array = new Integer[10];
for (int i = 0; i < array.length; ++i)
array[i] = i;

System.out.println("Count > 5 = " + countGreaterThan(array, 5));

最佳答案

好吧,这不是完全删除。

第一种方法

<T> int countGreaterThan(Comparable<T>[] anArray,T elem)

适用于 Comparable<T> 的数组,但不强制要求 elem也是 Comparable .

你可以检查一下:
static class Y {
int val;
public Y(int val){
this.val=val;
}
}

static class W extends Y implements Comparable<Y>{
public W(int val){
super(val);
}
public int compareTo(Y o){
return this.val-o.val;
}
}

W[] array = new W[10];
for (int i = 0; i < array.length; ++i)
array[i] = new W(i);

System.out.println("Count > 5 = " + countGreaterThan(array, new Y(5)));

第一个方法将被调用。

关于java - 具有边界的泛型与具有泛型类型的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14704949/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com