Java Guice CreationException-未绑定类型Foo的实现
需要一些帮助来理解这个错误和可能的解决方法 所以我有这样一种类型:Java Guice CreationException-未绑定类型Foo的实现,java,dependency-injection,guice,Java,Dependency Injection,Guice,需要一些帮助来理解这个错误和可能的解决方法 所以我有这样一种类型: class Foo { static final class Bar {} @Inject Foo(TypeA a, @Nullable Set<Bar> b) {} } class-Foo{ 静态最终类条{} @注入 Foo(typeaa,@Nullable Set b){} } 为了使Foo可注入,我需要实现对 参数a和b,现在我可以提供类型a了 实现,它不是空的,所以我在 包模块类。但是
class Foo {
static final class Bar {}
@Inject
Foo(TypeA a, @Nullable Set<Bar> b) {}
}
class-Foo{
静态最终类条{}
@注入
Foo(typeaa,@Nullable Set b){}
}
为了使Foo可注入,我需要实现对
参数a和b,现在我可以提供类型a了
实现,它不是空的,所以我在
包模块类。但是b呢?它是一个可空的,怎么写
@提供了一个可以为null的参数?我猜是这样
不应该是必需的,Guice应该理解注释。。。
但有些地方不对劲,我有个错误:
1) 未绑定java.util.Set
的实现
这里是@Provides方法(在atm中不起作用)
@提供@Nullable
公共Foo provideFoo(a类,可空集b){
返回新的Foo(a,b);
}
我知道嵌套类不是公共类,也不是构造函数,所以可能
guice无法访问它,但即使我将它们全部公开(我
真的不想)错误仍然存在。。。我有什么事吗
失踪 对
Set
没有任何绑定与对Set
有绑定(即null
)是有区别的
您需要一个@Provides
方法来返回集(可能是null
)或类似bind(Bar.class).toProvider(Providers.ofInstance(null))
,以便能够向Foo
的构造函数提供第二个参数
还要注意的是,您的@为Foo
提供了方法,它只是直接调用@Inject
带注释的构造函数,因此根本没有必要这样做。我还想说,最好绑定到一个空的集合
而不是null集合
没有任何绑定与集合
绑定(即null
)是有区别的
您需要一个@Provides
方法来返回集(可能是null
)或类似bind(Bar.class).toProvider(Providers.ofInstance(null))
,以便能够向Foo
的构造函数提供第二个参数
还要注意的是,您的@为Foo
提供了方法,它只是直接调用@Inject
带注释的构造函数,因此根本没有必要这样做。我还想说,最好绑定到空的集合
而不是null
您真的需要null集合吗?您可以使用空集吗?不完全可以,但最初的想法也是不要求客户机提供一个set对象(即使客户机并不真正关心,也要构造一个空集),Foo构造函数会检查null,并在需要时创建一个空集。我知道我可以通过添加Foo(TypeA)和删除@Nullable来重载构造函数。也许我应该考虑一下。你真的需要空集合吗?您可以使用空集吗?不完全可以,但最初的想法也是不要求客户机提供一个set对象(即使客户机并不真正关心,也要构造一个空集),Foo构造函数会检查null,并在需要时创建一个空集。我知道我可以通过添加Foo(TypeA)和删除@Nullable来重载构造函数。也许我应该考虑一下。因此,根据你的建议,我是否应该将这段代码重构为类似这样的东西(斯塔斯·库林(Stas Kurilin)的早期回复似乎暗示了这一点)。两个构造器,Foo(TypeA a)和Foo(TypeA a,Set b),然后@Inject第一个构造器?因此,根据你的建议,我是否应该将这段代码重构成这样的东西(Stas Kurilin的早期回复似乎暗示了这一点)。两个构造函数Foo(typeaa)和Foo(typeaa,Set b),然后@Inject第一个?
@Provides @Nullable
public Foo provideFoo(TypeA a, @Nullable Set<Foo.Bar> b) {
return new Foo(a, b);
}