如何将默认方法添加到Guice界面



我有以下界面:

public interface FooFactory {
    Foo create();
    default Foo createWithData(Data data){
        Foo foo = create();
        foo.addData(data);
        return foo;
    }
}

我正在按如下方式安装它:

install(new FactoryModuleBuilder().build(FooFactory.class));

但是,问题是 Guice 用自己的工厂方法覆盖了我的默认方法。 我得到的 Foo 与 create() 中的 Foo 相同(未设置数据(。 默认方法永远不会被调用。

现在,这只是一种方便的方法,但是我可以告诉Guice不要覆盖我的函数吗?

guice-assistedinject模块

有一个错误,用于跳过第 L252 行的 java-8 默认方法。 我发现没有测试来测试此功能。

默认方法在 Java 编译器中既不是bridge方法也不是synthetic方法。但是,它的评论说这将跳过默认方法。代码应为:

if (isDefault(method)){
  ...
}

您需要编写自己的Provider

最新更新