需要一些帮助来理解这个错误和解决它的可能方法。
所以我有这样一个类型:
class Foo {
static final class Bar {}
@Inject
Foo(TypeA a, @Nullable Set<Bar> b) {}
}
为了使 Foo 可注入(inject),我需要满足对 params a 和 b,现在我提供 Type a 没问题 实现,它不为空,所以我在 包模块类。但是b呢?可以为空,怎么写 @Provides 一个可以为空的参数?我的猜测是 不应该是必需的,Guice 应该理解注释...... 但是有些东西不正常,我收到了这个错误:
1) java.util.Set<Foo$Bar>
没有实现被绑定(bind)了。
这是@Provides 方法(在 atm 上不起作用)
@Provides @Nullable
public Foo provideFoo(TypeA a, @Nullable Set<Foo.Bar> b) {
return new Foo(a, b);
}
我知道嵌套类不是公共(public)的,也不是构造函数,所以也许 guice 无法访问它,但即使我将它们全部公开(我 真的不想要)错误仍然存在......我有什么事吗 丢失的?
最佳答案
不对 Set<Bar>
进行任何绑定(bind)是有区别的并具有 Set<Bar>
的绑定(bind)那是 null
.
你需要一个 @Provides
返回 Set<Bar>
的方法(可能是 null
)或类似 bind(Bar.class).toProvider(Providers.ofInstance(null))
的东西为了能够向 Foo
提供第二个参数的构造函数。
另请注意,您的 @Provides
Foo
的方法正在调用 @Inject
直接注释构造函数,所以根本没有必要。我还想说最好绑定(bind)到一个空的 Set<Bar>
而不是 null
.
关于java - Guice CreationException - 没有绑定(bind) Foo 类型的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7048832/