У меня есть класс java, который состоит из внутреннего интерфейса и планирует реализовать класс реализации во время выполнения с использованием asm-байт-кода.супер класс не присваивается классу, реализованному во время выполнения asm
package my.example;
public class X{
public static interface XInt{
public void getX();
}
//the following class that implement the interface will be defined during runtime.
//I put it here just to show how the implementation will look like
public static XImpl extend Y implements XInt{
public void getX(){//implementation code}
}
}
Я уверен, что мой ASM код правильно, но дело в том, после определения класса и вызвать Class.forName («my.example.X $ XImpl»), я получаю следующее сообщение об ошибке:
> Bad <init> method call
Exception Details:
Location:
my/example/X$XImpl.<init>()V: invokespecial
Reason:
Type 'my/other/package/Y' is not assignable to 'my/example/X$XImpl'
Я предполагаю, что класс Y еще не доступен во время выполнения? Я понятия не имею. Любая помощь будет оценена!
EDIT: Путь я загружаю XImpl очень просто:
defineClass("my.example.X$XImpl", getXImplByte());
Class.forName("my.example.X$XImpl"); //fails here
Причина, почему я уверен, мой байт-код и способ загрузки классов является правильным, потому что если я определить класс реализации без расширения любой другой класс, он будет работать нормально
Не могли бы вы опубликовать, как определить и создать экземпляр экземпляра XImpl? Похоже, типичная проблема загрузки класса – qwwdfsad
@qwwdfsad привет, я уже редактировал мой вопрос. Спасибо за ответ – Syenun