我认为你的枚举方法基本上是声音,但switch语句真的需要一个更面向对象的方法。考虑:
enum PersonComparator implements Comparator {
ID_SORT {
public int compare(Person o1, Person o2) {
return Integer.valueOf(o1.getId()).compareTo(o2.getId());
}},
NAME_SORT {
public int compare(Person o1, Person o2) {
return o1.getFullName().compareTo(o2.getFullName());
}};
public static Comparator decending(final Comparator other) {
return new Comparator() {
public int compare(Person o1, Person o2) {
return -1 * other.compare(o1, o2);
}
};
}
public static Comparator getComparator(final PersonComparator... multipleOptions) {
return new Comparator() {
public int compare(Person o1, Person o2) {
for (PersonComparator option : multipleOptions) {
int result = option.compare(o1, o2);
if (result != 0) {
return result;
}
}
return 0;
}
};
}
}
使用示例(使用静态导入)。
public static void main(String[] args) {
List list = null;
Collections.sort(list, decending(getComparator(NAME_SORT, ID_SORT)));
}