gpt4 book ai didi

java - Guice CreationException - 没有绑定(bind) Foo 类型的实现

转载 作者:行者123 更新时间:2023-11-29 09:20:06 25 4
gpt4 key购买 nike

需要一些帮助来理解这个错误和解决它的可能方法。

所以我有这样一个类型:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com