среда, 12 сентября 2012 г.

λямбда

Посетил доклад коллег, участвующих в разработке лямбда-выражений для Java. Было весьма познавательно.

Во-первых, я узнал про effective final. Компилятор теперь сам может узнавать, является ли локальная переменная неизменяемой. Он позволяет использовать такие переменные в лямбда-выражениях и, возможно, будет позволять их использовать в анонимных классах. Теперь можно будет не писать final перед локальной переменной.

Во-вторых, узнал, что в Java будут две, как минимум, реализации лямбда-выражений. Одна, на базе анонимных классов, будет более медленной, но будет позволять, например, сериализацию. Вторая, использующая статический метод и вызов invokedynamic, была недавно добавлена для увеличения производительности.

Помимо обычных лямбда-выражений вида:
    (String s) -> System.out.println(s)
    x -> x + x
    (x, y) -> x + y
будет возможность использовать существующие методы:
unbound static
Comparator cmp = Integer::compare;
используется статический метод класса с двумя параметрами
unbound virtual
Comparator cmp = Integer::compareTo;
используется виртуальный метод класса с одним параметром, где вторым параметром является экземпляр этого класса
bound virtual
Comparator cmp1 = Integer::compare;
Comparator cmp2 = cmp1::compare;
используется виртуальный метод класса с двумя параметрами
Там ещё много чего было, это я пока для затравки написал.


Комментариев нет:

Отправить комментарий