Comments 19
Потоки в Java можно сравнить с движением воды в водопаде или в реке.
Сравнение так сравнение) что это значит вообще?
Объясните, зачем эти костыли с интерфейсами на каждый чих? Правда, что не осилили нормальные функциональные типы(например, (String, String) -> String вместо BiFunction) и кусок синтаксиса для их поддержки?
Я думаю для обратной совместимости.
А в чем отличие если люди все равно пишут (x, y) -> x
Обратная совместимость это, конечно, магические слова, которыми всё можно оправдать, но я не очень понимаю, каким она тут боком.
Разница в том, что с нормальным синтаксисом не надо было бы придумывать 100500 разных интерфейсов про одно и то же. Плюс не было бы тайных знаний про то, что вот, есть, дескать, особые интерфейсы, которые можно представить лямбдами. И не надо было бы компилятору про это рассказывать костыльной аннотацией.
@FunctionalInterface
нужна лишь для проверки на этапе компиляции, что интерфейс действительно функциональный (т.е. содержит ровно один абстрактный метод), чтобы случайно не сломать код, добавив ещё один абстрактный метод. В самих функциональных интерфейсах, перечисленных в статье, нет абсолютно ничего магического, это просто универсальные заготовки. А так любой интерфейс, в котором есть ровно один абстрактный метод, работает как функциональный (может инстанцироваться лямбда-выражением вместо анонимного класса), например, Comparator, который в джаве с версии 1.2.Да я и говорю про эти интерфейсы, которые с одним методом. И про проверку компилятором, да. Я прекрасно это всё знаю, и всё это не отвечает на мой начальный вопрос.
Ну всеже во первых обратная совместимость. У нас есть проект, который использует фреймворк ещё написанный на Java 1.4, и денег на миграцию не дают. Потому, что он до сих пор работает, хоть и убогий. Так вот ему можно скармливать как-бы-функциональные интерфейсы.
А во вторых, потом захотелось бы именованные типы, что бы не писать по сто раз String, String, String. Да и что бы понятнее было.
По мне так нормальное и красивое решение. И вам и нам так сказать.
Объясните, зачем эти костыли с интерфейсами на каждый чих? Правда, что не осилили нормальные функциональные типы(например, (String, String) -> String вместо BiFunction) и кусок синтаксиса для их поддержки?
Зачем добавлять новые отдельные типы, когда фича замечательно ложится на уже существующие интерфейсы с щепоткой синтаксического сахара?
Такое чувство, что у автора была статья про Java 8 лет десять назад, он добавил к ней пару абзацев, поменял заголовок и получил вроде бы актуальную модную статью. Зачем такое вообще переводить-то?
Очень жаль, что на Хабре нет черного списка, чтоб такие вот компании с их блогами в него загонять.
Бестолковая статья
Бестолковая не статья а джава, и сравнение с водопадами и реками это как раз и есть "про джава" которая осталась в джава 8 а потом умерла а все что после "выходит" это игры с ностальгией или эксплуатация мавзолея.
Касательно интерфейсов - ООП - всё, его место где-то возле си++ а а прототипирования ему делать нечего, джависты это поняли уже окончательно и пихают как умеют функциональность в свое родное ООПэ
Хотя уже и еду понятно что все для чего могла быть нужна джава давно и на вселенную проще и полноценнее делает JS, но куда ж девать короны джава-чемпионов? И что сказать в молящие глаза упёртых адептов вскормленных годами запредельных зарплат за глубокомысленное смотрение в окно и думанье дум про объектную модель нанашего мега приложения подпирающего небо !?
Размышления о Java 8 и Java 11 в ожидании Java 17