2

コンパイラは「シンボルが見つかりません:メソッドcompareTo(java.lang.Object)」と言います。ここで間違いはどこにあるのかアドバイスをいただけますか?

コードの一部は次のとおりです。

public class OBTComparable<ObjectType> implements Comparable<OBTComparable>
{
    public OTBComparable leftNode = null;
    public OBTComparable mainNode = null;
    public OBTComparable rightNode = null;
    public ObjectType object = null;

    public OBTComparable(ObjectType requiredObject)
    {
        object = requiredObject;
    }

    @Override
    public int compareTo(OBTComparable other)
    {
        if(object.compareTo(other.object) == 0)
            return 0;
        else 
            if (object.compareTo(other.object) > 0)
                return 1;
            else return -1;
    }
}
4

3 に答える 3

4

に委任してObjectTypeいるためComparable、スコープも必要です。OBTComparable compareTo()ObjectType

に変更<ObjectType>すると <ObjectType extends Comparable<ObjectType>>、次のようにコンパイルされます。

public class OBTComparable<ObjectType extends Comparable<ObjectType>> implements Comparable<OBTComparable>
于 2012-03-30T23:32:59.523 に答える
3

これはあなたが探している適切なコードだと思います(わかりやすくObjectTypeするために に置き換えました):T

class OBTComparable<T extends Comparable<? super T>> implements Comparable<OBTComparable<T>> {
    public OBTComparable<T> leftNode = null;
    public OBTComparable<T> mainNode = null;
    public OBTComparable<T> rightNode = null;
    public T object = null;

    public OBTComparable(T requiredObject) {
        object = requiredObject;
    }

    @Override
    public int compareTo(OBTComparable<T> other) {
        if (object.compareTo(other.object) == 0) {
            return 0;
        } else if (object.compareTo(other.object) > 0) {
            return 1;
        } else return -1;
    }
}

ここで何を変更しましたか:

  1. OBTComparable は型パラメーターを使用するため、実装時にそれを示す必要がありますComparable。したがってimplements Comparable<OBTComparable<T>>、単にimplements Comparable<OBTComparable>.
  2. メソッドで2 つのオブジェクトを比較しますcompareToが、それらは比較可能ですか? この要件が確実に満たされるようOBTComparable<T extends Comparable<T>>にするには、OBTComparable<T>. 次に、 を呼び出すことができることがわかりますcompareTo
于 2012-03-30T23:34:15.437 に答える
2

ObjectTypeも実装する必要がありますComparable<ObjectType>

そして、あなたがこれを行うならば、私はこれを信じます:

public int compareTo(OBTComparable other)
{
    if(object.compareTo(other.object) == 0)
        return 0;
    else 
        if (object.compareTo(other.object) > 0)
            return 1;
        else return -1;
}

これに簡略化できます:

public int compareTo(OBTComparable other)
{
    return object.compareTo(other.object);
}
于 2012-03-30T23:31:48.823 に答える