Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由于缺少java.util.Optional的实现而导致Guice CreationException_Java_Guice - Fatal编程技术网

由于缺少java.util.Optional的实现而导致Guice CreationException

由于缺少java.util.Optional的实现而导致Guice CreationException,java,guice,Java,Guice,我正在将一个为Java 7编写的应用程序升级到版本8。它使用Guice将配置值注入到对象的构造函数中。然而,在升级Java版本之后,我现在在运行单元测试时遇到了一个神秘的错误: java.lang.RuntimeException: com.google.inject.CreationException: Guice creation errors: 1) No implementation for java.util.Optional<java.lang.Boolean> ann

我正在将一个为Java 7编写的应用程序升级到版本8。它使用Guice将配置值注入到对象的构造函数中。然而,在升级Java版本之后,我现在在运行单元测试时遇到了一个神秘的错误:

java.lang.RuntimeException: com.google.inject.CreationException: Guice creation errors:

1) No implementation for java.util.Optional<java.lang.Boolean> annotated with @Config(value=AsyncHttpClientConfigProvider.allowPoolingConnection) was bound.
  while locating java.util.Optional<java.lang.Boolean> annotated with @Config(value=AsyncHttpClientConfigProvider.allowPoolingConnection)
    for field at AsyncHttpClientConfigProvider.allowPoolingConnection(AsyncHttpClientConfigProvider.java:212)
  at Module.configure(Module.java:24)

...


13 errors
    at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
    at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:154)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
    at com.google.inject.Guice.createInjector(Guice.java:95)
    at com.google.inject.Guice.createInjector(Guice.java:72)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at org.jukito.JukitoRunner.ensureInjector(JukitoRunner.java:105)
    at org.jukito.JukitoRunner.computeTestMethods(JukitoRunner.java:233)
    ... 19 more
java.lang.RuntimeException:com.google.inject.CreationException:Guice创建错误:
1) 未绑定带有@Config(value=AsyncHttpClientConfigProvider.allowPoolingConnection)注释的java.util.Optional的实现。
查找带有@Config(value=AsyncHttpClientConfigProvider.allowPoolingConnection)注释的java.util.Optional时
用于AsyncHttpClientConfigProvider.allowPoolingConnection(AsyncHttpClientConfigProvider.java:212)处的字段
配置(Module.java:24)
...
13个错误
位于com.google.inject.internal.Errors.ThrowCreationExceptionIferErrorSexist(Errors.java:435)
在com.google.inject.internal.InternalInjectorCreator.InitializeStatly上(InternalInjectorCreator.java:154)
在com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)上
位于com.google.inject.Guice.createInjector(Guice.java:95)
位于com.google.inject.Guice.createInjector(Guice.java:72)
位于com.google.inject.Guice.createInjector(Guice.java:62)
位于org.jukito.JukitoRunner.ensureInjector(JukitoRunner.java:105)
位于org.jukito.JukitoRunner.computeTestMethods(JukitoRunner.java:233)
... 还有19个

我遗漏了什么会导致此错误?

很简单,您遗漏了
@Config(AsyncHttpClientConfigProvider.allowPoolingConnection)Optional的绑定,该绑定不同于
@Config(AsyncHttpClientConfigProvider.allowPoolingConnection)布尔值。要获得更具体的答案,我们需要更多地了解您以前的工作注入点和当前失败的注入点,但是考虑到java 8之前不存在java.util.Optional,很可能是您自己添加了它,从而更改了用于查找绑定的Guice键

与Java8支持的其余部分一样,对的支持在中出现,并且只有在使用时才出现。如果没有它,或者在Guice的早期版本中,当作为键使用时,您的注入器将像对待任何其他泛型类型一样对待Optional

Guice 3.0的“可选”绑定仅限于使用
@Inject(optional=true)
的方法和字段注入,这仍然有效,但Guice 4.0的升级中没有任何内容自动支持多绑定之外的可选类型