【发布时间】:2020-07-12 05:42:25
【问题描述】:
使用 Bytebuddy 假设如下:
class Service {
protected Handler handler;
...
}
interface Handler {
public void handle();
}
class ConcreteHandler implements Handler {
public void handle() {
...
}
public void handle2() {
...
}
}
一般我们调用Handler的handle()方法,但在某些情况下我们需要调用ConcreteHandler类的handle2(),也就是在运行时。现在的问题是:这可能使用 Bytebuddy 吗?可能是的,但是如何?
我试过了:
if (condition) {
MethodCall methodCall = (MethodCall)
MethodCall.invoke(methodHandle2).onField("handler")
.withAssigner(Assigner.DEFAULT, Assigner.Typing.DYNAMIC);
}
...但它失败并出现 IllegalStateException: Cannot invoke public void com.framework.ConcreteHandler.handle2(...) on protected com.framework.Handler com.framework.Service.handler
有什么想法吗?
【问题讨论】:
标签: java byte-buddy