понедельник, 24 февраля 2014 г.

Сопровождение кода? Не слышал!

В продолжение поста про лямбды решил ещё написать.

Допустим, что есть интерфейс:
    interface I {
        public int m(Number p);
    }
и есть реализация этого интерфейса:
    I o = new I() {
        @Override
        public int m(Number p) {
            return p.intValue();
        }
    };

IDEA подсветила выражение, предложив использовать лямбды. После чего, рефакторинг в одно нажатие изменил код так:
    I o = p -> p.intValue();

Но это ещё не всё! IDEA предлагает использовать ссылку на метод:
    I o = Number::intValue;

То есть создаётся λямбда с неявным параметром типа Number, у которого дёргается метод intValue.
Остаётся только застрелиться!

PS. Кстати, на основе лямбд можно легко делать lazy-инициализацию. Что мы скоро и сделаем в Swing.

6 комментариев:

  1. Ответы
    1. Если они и свинг прибьют - случится горе. Ибо javafx пока небыстра.

      Удалить
  2. Нет, ну а что? Удобно же.
    При наличии нормальноё IDE такой синтаксис не проблема. Вот если всё в нотепаде делать - тогда да, только застрелиться :)

    ОтветитьУдалить
    Ответы
    1. Неявные переменные с любым редактором - зло.

      Удалить
    2. Ну, может оно и зло. А функциональщики это очень любят, у них иначе никак :)

      Удалить
    3. Последний случай всё-равно неадекватный.
      Лучше писать p -> p.m()

      Удалить