我正在寻找ASM API来为方法调用进行参数类型转换。主要的转换是(Integer,int),(Double,double),(Float,float),它们都是用Java自动生成的。
例如,下面的代码没问题,因为在Integer
Double
和int
会在方法测试中自动转换为double
和aaa
public void test(Object a, Integer b, Double c){
aaa((String)a,b,c);
}
public void aaa(String a, int b, double c){
System.out.println(a.toString()+" b:"+b+" c:"+c);
}
我编写ASM以在字节码级别执行此转换(对于一般的invokevirtual
调用),并且我将方法test
的参数推送到堆栈的想法是:
if(b instanceof Integer){
{
int t = (Integer)b.intValue(); // Sample.. Assume t is 4th local variable.
}
mv.visitVarinsn(iload, 4);
}else if(b instanceof Double){mv.visitVarinsn()}
else if(b instanceof Byte){mv.visitVarinsn()}
mv.visitVarInsn(INVOKEVIRTUAL, "..", "test", methodType);
由于b类型的if-else条件测试太长,我想知道是否已经有一些现有的ASM API可以为我做这个。