Допустим, что есть интерфейс:
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.
Чё, свинг ещё жив?!
ОтветитьУдалитьЕсли они и свинг прибьют - случится горе. Ибо javafx пока небыстра.
УдалитьНет, ну а что? Удобно же.
ОтветитьУдалитьПри наличии нормальноё IDE такой синтаксис не проблема. Вот если всё в нотепаде делать - тогда да, только застрелиться :)
Неявные переменные с любым редактором - зло.
УдалитьНу, может оно и зло. А функциональщики это очень любят, у них иначе никак :)
УдалитьПоследний случай всё-равно неадекватный.
УдалитьЛучше писать p -> p.m()