使用javassist读取方法的返回值

4

我希望能读取一个方法的返回值,并将其传递给使用method.insertAfter插入的代码。

例如:

public String sayHello(){
    return "1";
}

我想使用javassist添加代码,例如 someClass.someMethod()。
method.insertAfter("someClass.someMethod(<how to add that value here>);");

有人能告诉我如何做到这一点吗?

[编辑] 我无法编辑方法体,因为可能存在其他代码。上面的方法只是一个示例。


我不确定我是否完全理解了你的意思,但是针对你想要的,我认为更容易的方法是将方法sayHello重命名为sayHello_modified,然后创建一个新的sayHello方法,在其主体中调用sayHello_modified并将其结果发送到someClass.someMethod,最后返回返回值。这样做对你来说可以接受吗? - pabrantes
这对我有用。非常感谢!!! - Santosh Tulasiram
1个回答

7
这对我很有效:

这适用于我:

    method.insertAfter( "System.err.println( $_ );");

如果该方法返回void,则$_将为null。因此,在您的情况下,我认为以下代码可以解决问题:
    method.insertAfter( "someClass.someMethod( $_ );");

其中someMethod接受一个对象。


我采用了评论区@pabrantes的解决方案。这行得通了...我也会尝试这个... - Santosh Tulasiram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接