0

关于 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并得到了类似的失败,因为它声明了equalsObject. Object因此,在尝试识别要通过的单一方法时,也许也应该排除存在的任何方法。

4

1 回答 1

0

您在我在最近版本中引入的库中发现了一个错误。这不应该发生,它将在我今天发布的 1.1.1 版本中得到修复。感谢您的报告。

于 2016-02-05T11:48:56.473 回答