gpt4 book ai didi

java - 为什么Byte Buddy缺少与操作码ASTORE对应的StackManipulation实现?

转载 作者:行者123 更新时间:2023-11-30 09:03:03 26 4
gpt4 key购买 nike

如果它的缺失是因为byte-buddy针对的是方法委托(delegate)域,那么我可以提供一个需要这个特性的场景:

private Object invokeSpi(Object spi, Object... params) {
Reducer reducer = (Reducer) spi;
return reducer.reduce((Integer) params[0], (Integer) params[8]);
}

上面的代码将为向下转换语句生成一条 ASTORE 指令。

最佳答案

Byte Buddy 提供了不同的Instrumentation 实现,它们都是由上述StackManipulation 组成的。但是,没有预构建的检测需要 ASTORE 指令,这就是它未被预定义的原因。但是,您可以轻松地为此目的实现自己的实现:

class AStrore implements StackManipulation {

private final int index; // Constructor omitted

public boolean isValid() {
return index >= 0;
}

public Size apply(MethodVisitor methodVisitor, Instrumentation.Context context) {
methodVisitor.visitIntInsn(Opcodes.ASTORE, index);
return new Size(-1, 0);
}
}

但是请注意,您随后直接使用存在兼容性问题的 ASM。为此,请阅读 information on Byte Buddy's website了解如何将 ASM 和 Byte Buddy 重新打包到您自己的命名空间中。

另请注意,您可以通过在调用前直接转换实例来避免 ASTORE 指令。

关于java - 为什么Byte Buddy缺少与操作码ASTORE对应的StackManipulation实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25803481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com