用于类型转换的ASM API

时间:2015-03-23 19:16:49

标签: java bytecode java-bytecode-asm

我正在寻找ASM API来为方法调用进行参数类型转换。主要的转换是(Integer,int),(Double,double),(Float,float),它们都是用Java自动生成的。

例如,下面的代码没问题,因为在Integer

之前,Doubleint会在方法测试中自动转换为doubleaaa
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可以为我做这个。

0 个答案:

没有答案