Всякий раз, когда вы сравниваете вещи, которые не имеют естественного, последовательного порядка, вы не должны реализовывать Comparable
.Реализуйте Comparator
вместо этого.Причина этого в том, что критерии сортировки не свойственны объекту ... кто может сказать, что 12-летний "больше", чем 11-летний?Что делать, если 11 лет выше?Есть более ранний день рождения?Подобные сравнения являются произвольными и относятся к контексту, в котором они используются, а не по сути к самому человеку.
Это не обязательно означает, что вы должны предоставлять больше данных.Вы можете легко выставить Comparator, все еще инкапсулируя поле age
, если хотите.Как то так:
class Person {
int age;
public Comparator<Person> ageComparator() {
return new Comparator<Person>() {
public int compare(Person a, Person b) {
if ( a.age > b.age ) {
return 1;
} else if ( a.age < b.age ) {
return -1;
} else {
return 0;
}
}
};
}
}