我有一个由内部接口组成的 java 类,并计划在运行时使用 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 类在运行时还不可用?我不知道..任何帮助将不胜感激!
编辑:我加载 XImpl 的方式非常简单:
defineClass("my.example.X$XImpl", getXImplByte());
Class.forName("my.example.X$XImpl"); //fails here
我确定我的字节码和类加载方法是正确的原因是因为如果我在不扩展任何其他类的情况下定义实现类,它将正常工作