我有以下界面:
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
。