Допустим, что есть интерфейс:
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.