Java 同一类型的类型不匹配
我目前正试图为我的一门CS课程开始一个项目,在我被一个相当令人困惑的错误击中之前,我甚至没来五分钟。我的代码如下:Java 同一类型的类型不匹配,java,generics,type-constraints,Java,Generics,Type Constraints,我目前正试图为我的一门CS课程开始一个项目,在我被一个相当令人困惑的错误击中之前,我甚至没来五分钟。我的代码如下: import java.util.Comparator; import java.util.List; public class MergeSorter<T extends Comparable<T>> implements IMergeSorter { private List<T> arrayStore; private L
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;
}
Eclipse给了我以下错误:
Type mismatch: cannot convert from List<T extends Comparable<T>> to List<T extends Comparable<T>>
类型不匹配:无法从列表转换为列表
注:
方法本身是由我的教授提供给我的,我对这个类所做的唯一事情就是在顶部添加三个变量,更改类的泛型类型(最初是(T),我将其更改为(T),并在“排序”中添加一行方法。非常感谢任何帮助!通过在方法签名中使用
类型声明,您将引入第二个类型变量T
,该变量虽然名称相同,但与类声明中的变量不同
要修复此问题,请从方法签名中删除类型声明:
public int sort(List<T> list)
{
arrayStore = list;
return 0;
}
public int排序(列表)
{
arrayStore=列表;
返回0;
}
我认为仅仅从方法中删除
是不够的,因为它是一个重写
方法,但在接口IMergeSorter
中没有类型声明
我不知道您的IMergeSorter
声明,但可能是:
public interface IMergeSorter<T extends Comparable<T>> {
int sort(List<T> list);
}
那个声明看起来确实有点不合适。我并不感到惊讶;我教授的代码几乎从来都不会马上生效,我们学生总是要改变一些东西使其功能化。谢谢你的回答!我认为仅仅从方法中删除
是不够的,因为它是一个重写方法,但在方法中没有类型声明接口IMergeSorter
,我添加了一个新的答案作为补充您的答案很好,但我不是在猜测,无论接口是如何声明的,代码public class MergeSorter都实现了IMergeSorter{@Override public int sort(List List){return 0;}
将不会编译。@shizhz你说得对。需要实现IMergeSorter
中的类型参数+1
public interface IMergeSorter<T extends Comparable<T>> {
int sort(List<T> list);
}
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;
}
}