2016-11-19 6 views
0

Я пытаюсь разработать общий нисходящий компаратор. Он хорошо работает со строкой, однако у него есть предупреждение от затмения типа «Тип безопасности: снятие флажка из сопоставимого <T> в T» на линии с использованием метода compareTo.
Может кто-нибудь мне помочь?Тип предупреждения о безопасности при создании общего нисходящего компаратора

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

Смежные вопросы