Насколько я понимаю, они решили, что из-за стирания было бы грязно идти по пути типов функций , например. делегаты в C #, и они могут использовать только лямбда-выражения , что является просто упрощением единственного абстрактного метода синтаксиса класса.
Делегаты в C #:
public delegate void DoSomethingDelegate(Object param1, Object param2);
...
//now assign some method to the function type variable (delegate)
DoSomethingDelegate f = DoSomething;
f(new Object(), new Object());
(другой образец здесь
http://geekswithblogs.net/joycsharp/archive/2008/02/15/simple-c-delegate-sample.aspx)
Один аргумент, который они выдвинули в Project Lambda docs:
Стираются общие типы, которые открывают дополнительные места, где
разработчики подвергаются стиранию. Например, это не будет
возможно перегрузить методы m (T-> U) и m (X-> Y), что будет
запутанный.
раздел 2 в:
http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-3.html
(Окончательный синтаксис лямбда-выражений будет немного отличаться от приведенного выше документа:
http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html)
(x, y) => { System.out.printf("%d + %d = %d%n", x, y, x+y); }
В общем, мое лучшее понимание - то, что только часть синтаксического материала, который мог бы, фактически использоваться.
Скорее всего, Нил Гафтер имел в виду, что невозможность использования делегатов усложнит адаптацию стандартных API к функциональному стилю, а будет сложнее выполнить обновление javac / JVM.
Если кто-то понимает это лучше меня, я буду рад прочитать его рассказ.