关于 ByteBuddy 使用带有方法委托的注释的文档Pipe
指出,这java.util.function.Function
是一种适合与Pipe
.
@Pipe 注解没有在 MethodDelegation 中预注册,因为 Java 类库在定义 Function 类型的 Java 8 之前没有提供合适的接口类型。
但是,当我实际使用它时(在 java 8 中),抛出了一个异常,这似乎是由Function
.
java.lang.IllegalArgumentException: interface java.util.function.Function must declare exactly one non-static method
at net.bytebuddy.implementation.bind.annotation.Pipe$Binder.onlyMethod(Pipe.java:164)
at net.bytebuddy.implementation.bind.annotation.Pipe$Binder.install(Pipe.java:145)
at net.bytebuddy.implementation.bind.annotation.Pipe$Binder.install(Pipe.java:131)
这是绑定代码:
builder.implement(Proxy.class)
.method(ElementMatchers.any())
.intercept(MethodDelegation.to(ProxyClassImpl.class)
.appendParameterBinder(Pipe.Binder.install(Function.class)));
看来问题可能在于Pipe.Binder.install
寻找所有非静态的方法。也许它也应该排除默认方法。
此外,我尝试了这个com.google.common.base.Function
并得到了类似的失败,因为它声明了equals
从Object
. Object
因此,在尝试识别要通过的单一方法时,也许也应该排除存在的任何方法。