【发布时间】:2011-08-13 05:43:57
【问题描述】:
需要一些帮助来理解这个错误以及解决它的可能方法。
所以我有一个这样的类型:
class Foo {
static final class Bar {}
@Inject
Foo(TypeA a, @Nullable Set<Bar> b) {}
}
为了使 Foo 可注入,我需要为 参数 a 和 b,现在我提供 Type a 没有问题 实现,它不为空,所以我有一个@Provides 方法 包模块类。但是b呢?它是可空的,如何写 @提供了一个可以为空的参数?我的猜测是 不应该是必需的,Guice 应该理解注释...... 但是有些事情不正常,我收到了这个错误:
1) 没有绑定 java.util.Set<Foo$Bar> 的实现。
这里是 @Provides 方法(在 atm 不起作用)
@Provides @Nullable
public Foo provideFoo(TypeA a, @Nullable Set<Foo.Bar> b) {
return new Foo(a, b);
}
我知道嵌套类既不是公共的也不是构造函数,所以也许 guice 无法访问它,但即使我将它们全部公开(我 真的不想要)错误仍然存在......我有什么东西吗 失踪?
【问题讨论】:
-
你真的需要空集合吗?你能用空集吗?
-
不是真的,但最初的想法也是不要求客户端提供一个Set对象(即使客户端并不关心也构造一个空的Set),Foo构造函数检查null并创建如果需要,一个空集。我知道我可以通过添加 Foo(TypeA a) 并删除 @Nullable 来重载构造函数。也许我应该考虑一下。
标签: java dependency-injection guice