Intellij idea给了我一个错误:“比较器中的比较(T,T)不能应用于(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,任何帮助都是非常感谢的。
发布于 2016-05-18 07:20:53
您有两个不同的泛型类型参数,名为T-一个在类级别,另一个在getLongestSubsequence方法中。这两个人没有关系,尽管他们的名字是一样的。因此,comparator.compare不接受与传递给getLongestSubsequence方法的列表的元素类型相同的参数类型。
例如,在当前编写类时,您可以创建一个LCCS<String>实例,然后使用两个List<Integer>参数调用getLongestSubsequence方法。然后,comparator.compare()需要两个String,而您的代码将传递给它两个Integer,这就是为什么您的代码没有通过编译。
只需从<T>的声明中删除getLongestSubsequence,这将导致它使用类级别的T。
发布于 2016-05-18 07:21:15
在这里定义了类级别上的类型参数:
public class LCCS<T extends Comparable<T>> {稍后,此代码为方法的作用域定义另一个名称为的类型参数;它阴影类级声明:
private <T> Subsequence<T> getLongestSubsequence(...更改这段代码。让方法返回类级别的类型参数T
private Subsequence<T> getLongestSubsequence(...https://stackoverflow.com/questions/37292712
复制相似问题