如果一个模块提供了一个类,为什么该类需要一个带@Inject的构造函数?

时间:2016-03-17 21:03:25

标签: java dependency-injection guice

获取错误

  

在Foo.java中找不到合适的构造函数。类必须有一个(只有一个)带有@Inject的构造函数或一个非私有的零参数构造函数。

当我添加到课程Bar

时,我收到此错误
// constructor
@Inject
Bar(Foo foo) { /* ... */ }

以前,Bar是没有@Inject的无参数构造函数。这很有用(服务器可以启动)。

我一直有一个* Module.java类,它提供了一个Foo的副本。

我没有简单地将@Inject添加到Foo,因为Foo有两个构造函数。我的Module类的@Provides方法使用。

所以我不清楚为什么我需要将@Inject添加到已经提供的这个类中。 Injector应该能够从@Provides方法实例化它,而不依赖于Foo的构造函数,不是吗?

1 个答案:

答案 0 :(得分:1)

事情并没有出现。

我的@Provides方法返回Optional<Foo>。对于编译器和运行时,这当然是完全不同的。通过Bar接受Optional<Foo>解决问题。