gpt4 book ai didi

java - Comparator中的compare(T,T)不能应用于(T,T)

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:07:25 30 4
gpt4 key购买 nike

Intellij idea 给我这个错误:“Compare (T, T) in Comparator cannot be applied to (T, T)” 对于以下代码:

public class LCCS<T extends Comparable<T>> {

private Comparator<T> comparator;

public LCCS(Comparator<T> comparator) {
this.comparator = comparator;
}


/**
* Loops the two given lists for finding the longest subequence
*
* @param list1 first list.
* @param list2 second list.
* @param <T> list item type.
* @return LCCS and the sublist indices of the subsequence in list1 and list2.
*/
private <T> Subsequence<T> getLongestSubsequence(List<T> list1, List<T> list2) {
Subsequence<T> output = null;
for (int indexList1 = 0; indexList1 < list1.size(); indexList1++)
for (int indexList2 = 0; indexList2 < list2.size(); indexList2++)
if (comparator.compare((T)list1.get(indexList1), (T)list2.get(indexList2)) //Here comes the error
output = inspectsubsequence(list1, list2, indexList1, indexList2, output);
return output;
}
}

我已经将参数化类型更改为 T,它仍然向我显示消息,但不是只捕获 T。非常感谢任何帮助。

最佳答案

您有两个名为 T 的不同泛型类型参数 - 一个在类级别,另一个在 getLongestSubsequence。方法。两者没有关系,尽管他们同名。因此comparator.compare不接受与传递给 getLongestSubsequence 的列表的元素类型相同类型的参数方法。

由于当前已编写该类,例如,您可以创建 LCCS<String> 的实例然后调用getLongestSubsequence两个方法List<Integer>争论。 comparator.compare()然后会期望两个 String s,而您的代码将传递给它两个 Integer秒。这就是您的代码未通过编译的原因。

只需删除 <T>来自 getLongestSubsequence 的声明,这将导致它使用类级别 T .

关于java - Comparator中的compare(T,T)不能应用于(T,T),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37292712/

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