2017-03-10 6 views
0

ich die Methode zu machen gehören:Wie generiere ich ein compareTo ohne Warnungen?

public static <T> int compareTo(Comparable<T> o1,Comparable<T> o2){ 

     if(o1==o2){ 
      //Equals 
      return 0; 
     }else if(o1!=null && o2!=null){ 
      //Comparation 
      return o1.compareTo((T) o2); 
     }else{ 
      //Not equals 
      return (o1==null?-1:1); 
     }    

    } 

Aber Eclipse-zeigt mir die Warnung:

Typ Sicherheit: Ungeprüfter von Vergleichbar mit T werfen

Wie kann ich dies schreibe generische Methode ohne Warnungen?

+1

Welche Zeile zeigt die Warnung? –

+0

@MohamedELAYADI Ich würde diese Zeile schätzen "zurück o1.compareTo ((T) o2);" aber nicht sicher – lucasvw

Antwort

4
public static <T extends Comparable<T>> int compareTo(T o1,T o2){ 

    if(o1==o2){ 
     //Equals 
     return 0; 
    }else if(o1!=null && o2!=null){ 
     //Comparation 
     return o1.compareTo(o2); 
    }else{ 
     //Not equals 
     return (o1==null?-1:1); 
    }    

} 
+3

Wäre noch besser zu verwenden '>' –

+0

Natürlich !! :) Vielen Dank! –

+0

@JB Nizet, nein, normalerweise ist es besser, Platzhalter zu vermeiden, weil es normalerweise schlecht ist, Objekte verschiedener Typen zu vergleichen. –

0

Die allgemeinste würde

public static <T> int compareTo(Comparable<T> o1, T o2){ 

    if(o1==o2){ 
     //Equals 
     return 0; 
    }else if(o1!=null && o2!=null){ 
     //Comparation 
     return o1.compareTo(o2); 
    }else{ 
     //Not equals 
     return (o1==null?-1:1); 
    }    

} 

sein Es funktioniert sogar für Typen, die auf andere Typen vergleichbar sind.