如何计算count参数来调用java中的接口方法?

时间:2011-03-28 02:41:23

标签: java interface bytecode javassist

我正在使用javassist,我在加载时/运行时生成接口和其他东西。

要调用接口的方法(使用字节码调用接口),我们必须提供几个参数:indexbyte1,indexbyte2,count和0(来自http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc6.html)。

已经有我要调用的抽象方法(CtMethod),如何计算其数量?

例如在http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc6.html中,他们说“ invokeinterface指令的计数操作数记录了参数值数量的度量,其中long或double类型的参数值为两个单位贡献了两个单位。 count值和任何其他类型的参数贡献一个单位。这个信息也可以从所选方法的描述符中导出。冗余是历史的。

但也要说“计数操作数是一个不能为零的无符号字节。

如果我想调用的抽象方法没有参数,它将计数为0!?但是count不能为0.方法的描述符是()V。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我不知道javaassist的细节,但我假设计数是调用方法所需的堆栈空间的大小。如果是这种情况,那么您需要为任何参数之前被压入堆栈的'this'变量指定空间(因为您正在执行invokeinterface)。如果是这种情况,那么对于没有参数的方法,计数将为1。

答案 1 :(得分:0)

实例方法固有地使用调用主题的堆栈单词。