ByteBuddy上的documentation使用带有方法委派的Pipe
注释表明java.util.function.Function
是绑定用于Pipe
的合适类型。
@Pipe注释未预先注册MethodDelegation 因为Java类库没有合适的接口 在Java 8之前键入,它定义了Function类型。
然而,当我实际使用它时(在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
上存在的任何方法。
答案 0 :(得分:0)
您在我最近的版本中引入了库中的错误。这不应该发生,它将在我今天发布的1.1.1版本中修复。感谢您的举报。