2017-03-10 64 views
0

我做的方法屬於:如何使通用compareTo沒有警告?

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

    } 

但是Eclipse顯示我的警告:

類型安全:未選中可比投至T

我怎麼可以這樣寫沒有警告的通用方法?

+1

哪一行顯示警告? –

+0

@MohamedELAYADI我猜這條線「return o1.compareTo((T)o2);」但不知道 – lucasvw

回答

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

會更好使用'>' –

+0

當然!! :) 謝謝! –

+0

@JB Nizet,不,通常最好避免使用通配符,因爲比較不同類型的對象通常是不好的。 –

0

最普遍的是

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

} 

它的工作即使對於可媲美其他類型的類型。