C# - pattern matching - many discards
Судя пот ответу вы считает, что я тоже бросаю камни в Яву. Абсолютно не так. Я просто пытаюсь найти отличия.
Нет, мне просто интересно как в шарпе реализовали именно ссылки на методы, а не присваивание "имён" лямбдам. Я с этим в шарпе не сталкивался.
Про Runnable там не было. Интересно как с различными количеством параметров происходит?
В яве сделали через "функциональные интерфейсы". Любой интерфейс с одним методом считается "функциональным", т.е. может описывать тип функции (метода).
Runnable старый интерфейс, который был и до 8-й явы, и не лежит в java.util.function. Но так как у него один метод, то и он стал "фунциональным" :) И он прям подошёл для твоего примера, потому что параметров нет и ничего не возвращает.
Фишка в том, что любой метод класса или лямбду можно определить типом функционального интерфейса у которого единственный метод имеет те же параметры (количество и тип) и тот же тип результата (ну, про наследование и приведение типов не забываем) что и наш метод / лямбда. В примере, как add: два инта и возвращает инт.
public interface MyMethod { int add(int a, int b);} // Не функциональный! больше одного метода public interfce TooManyMethods { int add(int a, int b); int multiply(int a, int b); } MyMethod m = (a, b) -> a + b; // маловато параметеров, ошибка будет MyMethod wrong = a -> a + 10;
как-то так