2017-03-10 38 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); 
    }    

} 

它的工作即使对于可媲美其他类型的类型。