当前位置: 首页 > 知识库问答 >
问题:

可比不能转换为T#1

王念
2023-03-14

我有一段代码,它采用了Comparable类型的泛型,我的类实现了Comparable接口。我在类中的compareTo()方法上收到一个错误,指出Comparable无法转换为T#1。

完整的错误消息是-

Edge.java:40: error: method compareTo in interface Comparable<T#2> cannot be applied to given types;    
    return (this.weight).compareTo(e.weight());
                        ^
    required: 
        T#1 found: Comparable reason: argument mismatch; Comparable cannot be converted to T#1    where 
    T#1,T#2 are type-variables: 
        T#1 extends Comparable<T#1> declared in class Edge 
        T#2 extends Object declared in interface Comparable
1 error

(this.weight)不应该返回类型“t”而不是“Comparable”吗?另外,weight()方法返回Comparable。

我不完全理解这一点。如果有人能澄清我为什么会收到这个错误,那就太好了。更换后,错误消失。用这个减肥。重量()。

public class Edge<T extends Comparable<T>> implements Comparable<Edge>{
    private int vertex1;
    private int vertex2;
    private T weight;

    public Edge(int vertex1, int vertex2, T weight){
        this.vertex1 = vertex1;
        this.vertex2 = vertex2;
        this.weight = weight;
    }

    public int either(){
        return vertex1;
    }

    public int from(){
        return vertex1;
    }

    public int other(){
        return vertex2;
    }

    public int to(){
        return vertex2;
    }

    public Comparable weight(){
        return weight;
    }

    public String toString(){
        String s = "";
        s += vertex1 + " " + vertex2 + " " + weight;
        return s;
    }

    @Override
    public int compareTo(Edge e){
        return (this.weight).compareTo(e.weight());
    }

}

共有1个答案

韦泳
2023-03-14

您的类Edge有一个类型参数,但您使用的是原始类型Edge,没有类型参数。添加类型参数:

public class Edge<T extends Comparable<T>> implements Comparable<Edge<T>> {
    // ...

    @Override
    public int compareTo(Edge<T> e) {
        return this.weight.compareTo(e.weight);
    }
}

另外,为什么方法权重()返回可比较的?它应该返回T

public T weight() {
    return weight;
}
 类似资料:
  • 结果: Main.java:22:错误:不兼容的类型:字符串不能转换为T返回Y;其中T是类型变量:T扩展类Vehicle 1错误中声明的字符串

  • 我只是想说清楚,我的意思是这样的- 另外,如果我访问第一个数组以外的元素,也会遇到同样的问题,即(INT*)arr+13。它会属于越界访问的条款吗?因为我是在第一个数组的边界之外访问的。

  • 下面是我的代码:

  • 问题内容: 有没有简单的方法可以将Transact-SQL转换为MySQL? 我正在尝试转换股票代码和公司名称的数据库档案。 问题答案: 简短的回答: 否 中等答案: MAYBE 长答案: 这取决于TSQL中的内容以及要投入的时间和精力。 TSQL不是MySQL方言的子集。因此,存在一些没有MySQL转换的TSQL。但是,两种语言之间的重叠非常重要,并且在某种程度上转换只是语法问题。 这不是一个新

  • 当试图运行我的java程序时,我收到以下错误 适用代码: 澄清一下,当试图将产品和价值的TreeMap数据放入exportsData时,会出现问题。当试图将exportsData添加到将其键(国家)与exportsData(价值)相关联的exportsTable时,同样适用。我明白错误的含义,只是不知道如何修复它。此外,不允许库(目的是了解输入数据流向“行/列”,并尝试使用Trees、HashMa