как расширить класс во время выполнения с помощью отражения - PullRequest
8 голосов
/ 01 мая 2011

Представьте, что у меня есть два класса A и B, B расширяет A, как

class B extends A
{
  ....
}

Однако в моем случае класс A зашифрован и может быть загружен только моим ClassLoader во время выполнения (во время компиляции A.class не может быть распознан как файл .class, поскольку он зашифрован). Это означает, что класс A не существует во время компиляции.

Мои вопросы:

  1. как можно написать код для класса B, так как некоторые методы переопределяют методы в классе A?
  2. как я могу указать, что класс B распространяется на класс A во время выполнения?

Ответы [ 2 ]

8 голосов
/ 01 мая 2011

Вы не можете с отражением.Но вы можете с CGLIB и, возможно, javassist

3 голосов
/ 01 мая 2011

Вы можете создать фиктивную копию A, которая имеет все методы, которые вы хотите переопределить, скомпилировать и развернуть только B.

Если вы не знаете, какие методы вы хотите переопределить до времени выполнения, вы будетенеобходимо генерировать код, используя либо API-интерфейс компилятора, однако библиотека, подобная ASM Objectweb, вероятно, будет намного проще.Я предпочитаю ASM, потому что он может легко генерировать код для генерации того, что вы хотите из шаблона.то есть вам не нужно писать весь код самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...