Вызовите произвольные конструкторы с помощью LambdaMetaFactory - PullRequest
0 голосов
/ 10 февраля 2020

Допустим, я пишу утилиту десериализации и хотел бы иметь производительность лучше, чем Reflection.

У меня есть Map<Class, MethodHandle>, где MethodHandle - это требуемый конструктор для данного класса. Когда пользователь вызывает T deserialize(ByteBuffer, Class<T>), он получает соответствующий MethodHandle из карты, получает аргументы конструктора из буфера и затем вызывает MethodHandle::invoke. И это прекрасно работает.

Дело в том, что если MethodHandle не равен static final, то производительность эквивалентна отражению.

Есть ли способ использовать LambdaMetaFactory или MutableCallSite для повышения производительности? Я не понимаю, как можно использовать LambdaMetaFactory (нам нужно заранее знать тип интерфейса?), И создание MutableCallSite все равно не будет static final.

...