Из java.lang.invoke.LambdaMetafactory
:
Рекомендуемый механизм для оценки лямбда-выражений состоит в том, чтобы преобразовать тело лямбда-выражения в метод, вызвать сайт вызова invokedynamic, список статических аргументов которого описывает единственный метод функционального интерфейса и метод реализации с пониженным сахаром, и вернуть объект (объект лямбда), который реализует целевой тип.
И из проверки это, по крайней мере, то, что делает Oracle JDK.
Мой вопрос: для лямбда-объекта есть ли способ найти имя (или дескриптор) метода реализации? В качестве альтернативы, учитывая список методов реализации, есть ли способ определить, какой из них соответствует данному лямбда-объекту?
LambdaMetaFactory
(если мы решим скомпилировать исходный код Java в байт-код, используя его), что является сегодняшней практикой, нам все равно приходится признать тот факт, что конкретная реализация JRELambdaMetaFactory
имеет большую свободу. В частности, нет требования, чтобы возвращаемый класс вообще содержал ссылку на целевой метод. Это может быть прокси, только реализующий функциональный интерфейс, делегирующий другому механизм вызова целевого метода. - person Holger   schedule 22.05.2017