Что значит заключить ссылку на метод в скобки? - PullRequest
0 голосов
/ 25 марта 2019

Я использую 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)));

Почему они эквивалентны? Что это за грамматика?

1 Ответ

2 голосов
/ 25 марта 2019

Дополнительный набор скобок является избыточным. Вы можете просто потерять их:

c.sort(SRoad::compareTo);

Относительно синтаксиса - sort имеет аргумент Comparator. Это метод, который берет любые два элемента списка, который вы сортируете, и сравнивает их. Оба способа передают ссылку на такой метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...