2016-11-19 35 views
0

我正在嘗試開發通用下降比較器。 它使用String很好,但是它有一個來自eclipse的警告,比如使用compareTo方法在線上的類型安全性:未檢查的從可比較的<T>轉換爲T「。
有人能幫助我嗎?進行通用下降時出現類型安全警告比較儀

package ytp.collections; 
import java.util.Comparator; 

public class DescendingComparator<T> implements Comparator<Comparable<T>> { 
    @Override 
    public int compare(Comparable<T> o1, Comparable<T> o2) { 
     int ret = o1.compareTo((T) o2); 
     if (ret < 0) { 
      return 1; 
     } 
     if (ret > 0) { 
      return -1; 
     } 
     return 0; 
    } 
} 

回答

0

好了,這是因爲Comparable<T>不是necesseraly T本身。您可以創建許多不同的類,它們實現Comparable<T>,但不延伸T

你需要做的是限制泛型參數:

public class DescendingComparator<T extends Comparable<T>> implements Comparator<T> { 
    @Override 
    public int compare(T o1, T o2) { 
     int ret = o1.compareTo(o2); 
     if (ret < 0) { 
      return 1; 
     } 
     if (ret > 0) { 
      return -1; 
     } 
     return 0; 
    } 
} 

還要注意的是相反的比較功能已經出現在JDK:Collections.html#reverseOrder(java.util.Comparator)

+0

Thnaks!我想出了我的誤解,你的代碼運行良好。 – Yoshipi