输入相同类型的不匹配

时间:2017-04-03 05:16:57

标签: 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 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;方法中添加一行。非常感谢任何帮助!

2 个答案:

答案 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;
    }
}