Java предупреждение с реализацией Comparable
Я пытаюсь использовать Collections.sort в ArrayList пользовательских объектов, но получаю предупреждение и не могу понять, почему
Warning: Type safety: Unchecked invocation
sort(ArrayList<CharProfile>) of the generic method sort(List<T>)
of type Collections
С этим кодом:
ArrayList<CharProfile> charOccurrences = new ArrayList<CharProfile>();
...
Collections.sort(charOccurrences);
И вот мой метод:
public class CharProfile implements Comparable {
...
@Override
public int compareTo(Object o) {
if (this.probability == ((CharProfile)o).getProbability()) {
return 0;
}
else if (this.probability > ((CharProfile)o).getProbability()) {
return 1;
}
else {
return -1;
}
}
}
3 ответа
Решение
Сопоставимый должен быть реализован с типом, здесь тип <CharProfile>
,
public class CharProfile implements Comparable<CharProfile>{
@Override
public int compareTo(CharProfile cp) {
...
}
}
Вы используете дженерики, поэтому сделайте тип, который вы передадите методу CharProfile
вместо Object
,
Я также рекомендовал бы переставить сравнения, как показано, в случае, если вероятность удваивается.
@Override
public int compareTo(CharProfile o) {
if (this.probability < o.getProbability()) {
return -1;
}
else if (this.probability > o.getProbability()) {
return 1;
}
else {
return 0;
}
}
Заметил, что уже ответил, но вот мой вклад в любом случае:)
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class CharProfile implements Comparable <CharProfile>{
public void doStuff(){
List<CharProfile> charOccurrences = new ArrayList<CharProfile>();
Collections.sort(charOccurrences);
}
@Override
public int compareTo(CharProfile o) {
return -1;
}
}