Guice CreationException—没有绑定类型Foo的实现



需要一些帮助来理解这个错误和可能的解决方法。

所以我有一个这样的类型:
class Foo {
   static final class Bar {}
   @Inject
   Foo(TypeA a, @Nullable Set<Bar> b) {}
}

为了使Foo可注入,我需要实现对参数a和b,现在我提供类型a没有问题实现,它不是空的,所以我有一个@ providers方法packages模块类。那么b呢?这是一个空值,怎么写@提供一个可以为空的参数?我猜是应该不需要,Guice应该理解注释…但是有些东西不正常工作,我得到了这个错误:

1)未绑定java.util.Set<Foo$Bar>的实现。

这里是@ providers方法(现在不起作用)

@Provides @Nullable
public Foo provideFoo(TypeA a, @Nullable Set<Foo.Bar> b) {
    return new Foo(a, b);
}

我知道嵌套类不是公共的,也不是构造函数,所以可能guice无法访问它,但即使我将它们全部公开(我真的不希望)错误仍然存在…我是什么人吗错过什么?

不结合Set<Bar>和结合Set<Bar>的是null是有区别的。

你需要一个返回Set<Bar>(可能是null)或类似bind(Bar.class).toProvider(Providers.ofInstance(null))@Provides方法,以便能够向Foo的构造函数提供第二个参数。

还要注意,Foo@Provides方法只是直接调用@Inject注释的构造函数,所以根本没有必要。我还想说,最好绑定到一个空的Set<Bar>,而不是null

相关内容

最新更新