Я видел, как Java творит много магии, но возможно ли это сделать:
Во время выполнения, используя (например) ClassLoader.defineClass
, загрузить класс A
, который реализует интерфейс B
. Интерфейс B
фактически не существует в пути к классам. Java выдаст исключение (ClassNotFoundException
IIRC), и класс не будет загружен. Все остальные части класса A
в порядке, и я точно знаю, что ни одна другая часть программы не будет использовать интерфейс B
. Итак, я хочу заставить интерпретатор игнорировать отсутствующее определение интерфейса и загрузить класс, полностью совпадающий с A
, за исключением того, что он не реализует интерфейс B
.
Возможно ли это? Конечно, этого можно достичь, перехватив исключение и вручную отредактировав двоичные данные класса A
, а затем снова загрузив его. Или путем создания пустого пустого интерфейса с именем B во время выполнения, вручную создав файл B.class и затем загрузив его. Но это выглядит немного грязно, поэтому мой вопрос: предоставляет ли Java какие-либо удобные способы сделать это?
Если нет, то, я думаю, я попытаюсь реализовать один из этих двух методов, но я все еще хочу услышать мнение.
Я делаю это, чтобы обеспечить удобный способ взаимодействия двух разных баз кода друг с другом, если они оба загружены, и просто работать нормально, если только одна из них.