使用javassist添加方法参数名称

时间:2017-09-01 07:07:41

标签: java reflection javassist

如果方法参数名称不存在,如何将方法参数名称添加到方法中?

有一些关于如何检索这些名称的示例(如果存在),使用如下方法:

CtMethod m;
CodeAttribute codeAttribute = m.getMethodInfo().getCodeAttribute();
if (codeAttribute != null) {
    LocalVariableAttribute table = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);
    if (table != null)
        for (int i = 0; i < table.tableLength(); i++)
            m.getMethodInfo().getConstPool().getUtf8Info(table.nameIndex(i));
} 

这将给出方法的所有参数名称(如果存在)。

我该如何反过来?

1 个答案:

答案 0 :(得分:0)

  

Javassist不允许删除方法或字段,但它允许   改名称。因此,如果不再需要某种方法,它应该   通过调用setName()和重命名并更改为私有方法   在CtMethod中声明的setModifiers()。

     

Javassist不允许添加   现有方法的额外参数。而不是做   这是一个接收额外参数以及另一个参数的新方法   参数应该添加到同一个类中。例如,如果你想要   向方法添加额外的int参数newZ:

     

void move(int newX, int newY) { x = newX; y = newY; }

     在Point类中,您应该将以下方法添加到Point类中:

     

void move(int newX,int newY,int newZ){

// do what you want with newZ.
move(newX, newY); 
     

}

有关详细信息,请查看此https://jboss-javassist.github.io/javassist/tutorial/tutorial2.html