我目前正在尝试为我的一个CS课程开始一个项目,而且在我遇到一个相当令人困惑的错误之前我甚至没有得到五分钟。我的代码如下:
import java.util.Comparator;
import java.util.List;
public class MergeSorter<T extends Comparable<T>> implements IMergeSorter
{
private List<T> arrayStore;
private List<T> temp;
private int arrSize;
@Override
public <T extends Comparable<T>> int sort(List<T> list)
{
arrayStore = list;
return 0;
}
我遇到的问题是排序方法中的第一行,
arrayStore = list;
Eclipse给出了以下错误:
Type mismatch: cannot convert from List<T extends Comparable<T>> to List<T extends Comparable<T>>
注意: 这个方法本身是由我的教授提供给我的,我在这个课上做的唯一的事情是在顶部添加三个变量,改变课程&#39;泛型类型(最初是(T),我改为(T扩展Comparable(T)),并在&#34; sort&#34;方法中添加一行。非常感谢任何帮助!
答案 0 :(得分:5)
通过在方法签名中使用<T extends Comparable<T>>
类型声明,您将引入第二个类型变量T
,虽然它具有相同的名称,但与您班级中的变量不同声明。
要修复,请从方法签名中删除类型声明:
public int sort(List<T> list)
{
arrayStore = list;
return 0;
}
答案 1 :(得分:1)
从您的代码中我认为仅从您的方法中删除<T extends Comparable<T>>
是不够的,因为它是override
方法,但您的界面IMergeSorter
中没有类型声明。< / p>
我不知道您的IMergeSorter
声明,但可能是:
public interface IMergeSorter<T extends Comparable<T>> {
int sort(List<T> list);
}
然后你的MergeSorter
应该是:
import java.util.Comparator;
import java.util.List;
public class MergeSorter<T extends Comparable<T>> implements IMergeSorter<T> {
private List<T> arrayStore;
private List<T> temp;
private int arrSize;
@Override
public int sort(List<T> list) {
this.arrayStore = list;
return 0;
}
}