Я использую Java 8. Я знаю, что это новые функции, такие как лямбда, ссылки на методы и т. Д. Но я не совсем понимаю этот код:
static class SRoad implements Comparable<SRoad> {
int id;
public SRoad(int id) {
this.id = id;
}
@Override
public int compareTo(SRoad o) {
return this.id - o.id;
}
}
public static void main(String[] args) {
ArrayList<SRoad> c = new ArrayList<>();
// Assume I added some instances in to the list...
c.sort((SRoad::compareTo));
}
Приведенный выше код в основном сортирует список SRoad по его идентификатору. Обратите внимание, что в последней строке ссылка на метод заключена в дополнительную пару скобок. Это не опечатка, это должно быть так, чтобы Java работал. Я обнаружил, что эта строка кода эквивалентна:
c.sort(((o1, o2) -> o1.compareTo(o2)));
Почему они эквивалентны? Что это за грамматика?