Существует плановая функция, JEP 8158765: изолированные методы , а также в списке отслеживания ошибок , которая позволит загружать и выполнять такой байт-код без генерации полностью материализованного Class
. Это может выглядеть как
MethodHandle loadCode(String name, MethodType type, byte[] instructions, Object[] constants)
в классе MethodHandles.Lookup
Однако эта функция находится в состоянии draft , поэтому может потребоваться значительное время, прежде чем она станет действительным API, и даже может случиться так, что ее отбросят в пользу совершенно другой функции, охватывающей случаи использования Авторы JEP имеют в виду.
До тех пор невозможно создать необходимые байты до и после байт-кода метода, чтобы описать полный класс и загрузить этот класс. Но, конечно, вы можете написать свой собственный метод, принимающий байт-код метода и некоторые метаданные, например ожидаемую сигнатуру, для создания такого класса и повторного использования этого метода.
Обратите внимание, что существует альтернатива созданию новых ClassLoader
, Class<?> defineClass(byte[] bytes)
в классе MethodHandles.Lookup
, который позволяет добавить класс в существующий контекст загрузки класса, начиная с Java 9.