需要一些帮助来理解这个错误以及解决它的可能方法。
所以我有一个类似这样的类型:
class Foo {
static final class Bar {}
@Inject
Foo(TypeA a, @Nullable Set<Bar> b) {}
}
为了使Foo可注射,我需要实现依赖性 params a和b,现在我没有问题提供Type a 实现,它不是null,所以我有一个@Provides方法 包模块类。但是b呢?它可以为空,如何写 @Provides有一个可以为空的参数?我的猜测是 不应该被要求,Guice应该理解注释...... 但有些东西不能正常工作,我收到了这个错误:
1)没有绑定java.util.Set<Foo$Bar>
的实现。
这是@Provides方法(它不起作用)
@Provides @Nullable
public Foo provideFoo(TypeA a, @Nullable Set<Foo.Bar> b) {
return new Foo(a, b);
}
我知道嵌套类不是公共的,也不是构造函数,所以也许 guice无法访问它,但即使我将它们全部公开(我 不要真的想要)错误仍然存在......我有什么东西吗? 失踪?
答案 0 :(得分:0)
对Set<Bar>
没有任何约束和Set<Bar>
null
的绑定之间存在差异。
您需要@Provides
方法返回Set<Bar>
(可能是null
)或类似bind(Bar.class).toProvider(Providers.ofInstance(null))
的方法,以便能够提供第二个参数到Foo
的构造函数。
另请注意,@Provides
的{{1}}方法只是直接调用Foo
带注释的构造函数,因此根本不需要。我还说最好绑定到空@Inject
而不是Set<Bar>
。