2 votes

Existe-t-il un moyen d'implémenter la méthode compareTo qui comparerait n'importe quel argument fourni ?

Le compilateur dit " cannot find symbol : method compareTo(java.lang.Object) ". Pourriez-vous m'indiquer où se situe l'erreur ?

Voici la partie du code :

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

4voto

Bohemian Points 134107

Vous avez besoin d'un champ d'application ObjectType à Comparable aussi, parce que OBTComparable es déléguant compareTo() à ObjectType :

Si vous modifiez <ObjectType> à <ObjectType extends Comparable<ObjectType>> il sera compilé :

public class OBTComparable<ObjectType extends Comparable<ObjectType>> implements Comparable<OBTComparable>

3voto

Malcolm Points 14261

Je pense que c'est le bon code que vous recherchez (j'ai remplacé ObjectType con T pour plus de clarté) :

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

Qu'est-ce que j'ai changé ici ?

  1. OBTComparable utilise un paramètre de type, vous devez donc l'indiquer lorsque vous implémentez Comparable . Vous avez donc implements Comparable<OBTComparable<T>> au lieu de simplement implements Comparable<OBTComparable> .
  2. Vous comparez deux objets dans le compareTo mais sont-elles comparables ? Pour vous assurer que cette condition est remplie, vous devez écrire OBTComparable<T extends Comparable<T>> au lieu de OBTComparable<T> . Vous saurez alors que vous pouvez appeler compareTo .

2voto

ObjectType doit également implémenter Comparable<ObjectType> .

Et si vous faites cela, je crois que cela :

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

peut être simplifiée comme suit :

public int compareTo(OBTComparable other)
{
    return object.compareTo(other.object);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X