我有一个由内部接口组成的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
我确定我的字节码和类加载方法是正确的,因为如果我定义实现类而不扩展任何其他类,它将正常工作
答案 0 :(得分:2)
似乎ASM类加载器不是var sig = new KJUR.crypto.Signature({"alg": "SHA256withRSA", "prov": "cryptojs/jsrsa"});
var key = KEYUTIL.getKey(privateKey, 'password');
sig.initSign(key);
sig.updateString(data);
var signature = sig.sign();
类加载器的子类,因此有两个不同的类(即使它们是相同的),它们不能相互转换。
尝试使用:
X