Реализация
A ClassLoader
должна вызывать представление класса для версии спецификации языка Java, которую она поддерживает.Таким образом, он должен содержать логику для получения байтового массива и превращения его в объект Class
или расширения некоторого ClassLoader, который это делает.Однако абстрактный класс ClassLoader
, который определяет Java, не имеет метода, который может вернуть byte [] из класса.Возможно, что некоторые реализации имеют это (возможно, загрузчик, системный или другой загрузчик классов), но в лучшем случае это будет зависеть от реализации, а не на что-то, на что можно положиться.
Если вам требуется такая функциональностьОдин из способов сделать это - создать собственную реализацию ClassLoader
и переопределить методы defineClass
таким образом, чтобы входные байтовые массивы были сопоставлены с Class
объектами, чтобы впоследствии их можно было извлечь.
Поскольку компилятор превращает исходный код в файлы классов (в основном, в байт []), а загрузчик классов превращает файлы классов в Class
объекты, в цепочке нет ничего, что напрямую подходило бы для перехода от Class
к байту [],Но с такими вещами, как переплетение байт-кода, генерация байт-кода во время выполнения и т. П., Вы можете найти что-то, что может сделать это.