为了解决这个问题,我们可以手动检查调用的 MethodHandle 类型。
示例代码:
public class MyTransformer extends Transformer {
@Override
public MethodHandle transform(MethodHandle target) {
// 检查 target 的类型是否为 MethodHandles.Lookup.INVOKEVIRTUAL
if (target.type().equals(MethodType.methodType(void.class, MyObject.class))) {
// 进行一些自定义处理
target = target.asType(target.type().changeReturnType(int.class));
}
return target;
}
}
在上面的示例代码中,我们手动检查了目标 MethodHandle 的类型是否为 MethodHandles.Lookup.INVOKEVIRTUAL,并在需要的情况下进行了自定义处理。