2016-07-04 5 views
1

このコードは、Generable型のComparableを使用し、myクラスはComparable Interfaceを実装しています。 ComparableをT#1に変換できないことを示すクラスのcompareTo()メソッドでエラーが発生しました。これを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' の代わりに、同等を返すべきではないでしょうか。 また、weight()メソッドはComparableを返します。

これは完全にわかりません。誰かがなぜこのエラーを受け取ったのかを明確にすることができれば嬉しいです。 this.weight()をthis.weight()に置き換えるとエラーになります。

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

あなたのクラスEdgeは、型パラメータを持っていますが、型パラメータなしraw typeEdgeを使用しています。 typeパラメータを追加します。

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

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

また、なぜこの方法はComparableを返しweight()ん?代わりにTを返す必要があります。

public T weight() { 
    return weight; 
} 
+0

ありがとうございます。私は提案された変更を行いましたが、私はまだこのようにもう一方のインスタンスでweightを使用し、weight()メソッドでエラーを受け取りました - > return(this.weight).compareTo(e.weight());なぜ私はエラーを受け取るのですか?(ComparableはTに変換できません) –

+0

@DeeptiSabnaniあなたのメソッド 'weight()'が、 'T'の代わりに' Comparable'を返すので、上記の私の答えでも述べました。 – Jesper

関連する問題