需要一些帮助来理解这个错误和可能的解决方法。
所以我有一个这样的类型: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
。