如何向Guice接口添加默认方法

Nat*_*ill 3 java guice java-8

我有以下界面:

public interface FooFactory {
    Foo create();

    default Foo createWithData(Data data){
        Foo foo = create();
        foo.addData(data);
        return foo;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在安装它如下:

install(new FactoryModuleBuilder().build(FooFactory.class));
Run Code Online (Sandbox Code Playgroud)

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

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

hol*_*ava 5

guice-assistedinject模块有一个错误,用于在第L252行跳过java-8默认方法.我发现没有测试这个功能的测试.

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

if (isDefault(method)){
  ...
}
Run Code Online (Sandbox Code Playgroud)

你需要自己编写Provider.