gpt4 book ai didi

java - 具有扩展泛型类型的方法签名 "incorrect"

转载 作者:行者123 更新时间:2023-12-01 23:19:27 29 4
gpt4 key购买 nike

我遇到了一个我不理解的 java 泛型编译时错误。

我有两种方法:

public static final <T> T doStuff(List<T> list, int k, Comparator<T> comparator) {
T element = null;
//some stuff done
return element;
}

public static final <T extends Comparable> T doStuff(List<T> list, int k) {
Comparator<T> comparator = new Comparator<T>() {
public int compare (T o1, T o2) {
return o1.compareTo(o2);
}
};
return doStuff(list, k, comparator);
}

由于找不到方法 doStuff(java.util.List, int, java.util.Comparator) 而失败。当我将第二种方法更改为:

public static final <T> T doStuff(List<T> list, int k) {
Comparator<T> comparator = new Comparator<T>() {
public int compare (T o1, T o2) {
return ((Comparable)o1).compareTo(o2);
}
};
return doStuff(list, k, comparator);
}

效果很好。

有人可以解释一下吗?

最佳答案

您的通用参数受原始类型 Comparable 的限制,无法与其自身进行比较(即 T )。

相反,将类型从 <T extends Comparable> 更改为至<T extends Comparable<T>> .

<小时/>

以下代码编译:

public static final <T> T doStuff(List<T> list, int k,
Comparator<T> comparator) {
T element = null;
// some stuff done
return element;
}

public static final <T extends Comparable<T>> T doStuff(List<T> list, int k) {
Comparator<T> comparator = new Comparator<T>() {
public int compare(T o1, T o2) {
return o1.compareTo(o2);
}
};
return doStuff(list, k, comparator);
}

关于java - 具有扩展泛型类型的方法签名 "incorrect",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20801267/

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