API, который допускает наиболее инвазивные изменения в работающей JVM, это, вероятно, JVM Tool Interface . Он предназначен для разработки отладчиков, которые могут динамически изменять методы во время выполнения, чтобы упростить отладку и продолжить отладку.
Соответствующий вызов для замены определения класса был бы RedefineClass
. Однако в документации сказано, что ее нельзя использовать для изменения иерархии класса:
Переопределение не должно добавлять, удалять или переименовывать поля или методы, изменять сигнатуры методов, изменять модификаторы или изменять наследование.
Поэтому я бы сказал, что вы не можете разумно изменять иерархию типов уже загруженных классов в неизмененной JVM. Либо измените иерархию классов во время загрузки (с помощью пользовательской ClassLoader
и инструментария с байт-кодом, возможно, с использованием AOP), либо найдите другой подход.