Java: null sûre méthode compareTo

Il a été demandé avant, mais je n'ai pas trouvé une bonne mise en œuvre avec une explication.

public int compareTo(Object o)
{
    if (this == null || o == null)
    { 
        return 0;
    }
    Tok tmp = (Tok) o;      
    if (this.rang < tmp.rang)
    {
        return -1;
    } else if (this.rang > tmp.rang ) {
        return 1;
    } else {
        return 0;
    }
}

J'ai lu deux questions similaires que j'ai trouvé encore; ils insistent sur la mise en œuvre d'une autre méthode. Je ne comprends pas pourquoi cela ne devrait pas travailler. La méthode renvoie un objet supplémentaire et il vérifie si ses une instance valide ou null, si null il suffit de retourner 0; ce serait le moyen le plus facile à mettre en œuvre null-safe compareTo.

La mise en œuvre qui a fonctionné pour moi a été:

public int compareTo(Object o)
{
    if (o == null)
    { 
        return 0;
    }
    Tok tmp = (Tok) o;      
    if (this.rang < tmp.rang)
    {
        return -1;
    } else if (this.rang > tmp.rang ) {
        return 1;
    } else {
        return 0;
    }
}

Ce n'est pas la mise en œuvre optimale l'on doit chercher à ce que le bon peuple posté ici que de réponses. Pour mon cas particulier, c'était assez décent que ce n'est jamais null encore l'objet reçu peut être null et la mise en œuvre initiale, les états-unis si l'un des deux est de retour null 0. Donc, si l'objet est null, 0 est renvoyé.

this est jamais null en Java.
il est probable qu'il signifie cette.someInstance
ce ne peut être null
Vous n'avez pas besoin de "innover" dans compareTo, aka réinventer la roue. Si vous utilisez un IDE, il va probablement le faire pour vous, vous laissant choisir les variables que vous souhaitez utiliser. Sinon, pensez à utiliser la Goyave est ComparisonChain. Si vous êtes heureux avec votre propre mise en œuvre, cependant, je me permets de se débarrasser de ces elses pour un code plus lisible.
cela devrait être compareTo(Tok o), pas de cast

OriginalL'auteur Sterling Duchess | 2012-11-22