Это приемлемый способ кодирования. Компилятор сделает вашу реализацию интерфейса Comparator
в классе. Поскольку вы не предоставляете имя для класса, это называется анонимным классом.
У меня нет проблем с использованием анонимных классов, но я предпочитаю использовать переменную для экземпляра анонимного класса. Это дает вам возможность указать имя, в котором указано, какое сравнение будет делать ваш компаратор. В этом случае я мог бы написать что-то вроде этого.
Comparator<Map.Entry<String, Integer>> byValueDescendingThenKey =
new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> entry1, Map.Entry<String, Integer> entry2) {
int valueComparison = entry1.getValue().compareTo(entry2.getValue());
if (valueComparison != 0) {
return -valueComparison;
} else {
return entry1.getKey().compareTo(entry2.getKey());
}
}
};
Collections.sort(list,byValueDescendingThenKey);
Обратите внимание, как если есть хороший описательное имя для переменной, которая ссылается на Comparator
, линия, которая делает сортировку намного яснее.
http://stackoverflow.com/questions/16750772/instantiating-interfaces-in-java –
Вы не создаете экземпляр интерфейса, а анонимный внутренний класс, реализующий интерфейс Comparator. – Ron
Thanks Ron, Я читал (а) понятие анонимного класса, а теперь его ясно – Lij