1

我正在尝试@Named Integer在 Guice 中创建一个参数,该参数允许在没有值适用的情况下使用空值:

@Singleton
public class MyClass extends SomeOtherClass {
    @Inject
    MyClass(Object o, @Named("the name") @Nullable Integer myParam) {
        ...etc...
    }
}

@Provides
@Named("the name")
public Integer getParamName() {
    // Set to null for Not Applicable
    return null;
}

不幸的是,Guice 似乎不喜欢这样:

null returned by binding at my.package.ApplicationConfig$MyModule.getParamName()
 but parameter 1 of my.package.MyClass.<init>() is not @Nullable

@Nullable我正在使用的注释是com.google.inject.internal.Nullable,它包含在 Guice 中并且确实有@Retention(RetentionPolicy.RUNTIME).

不幸的是,我在 Stack Overflow 上发现的类似问题要么不具建设性,要么不适用。有任何想法吗?

4

2 回答 2

3

我同意@yshavit。null代表状态通常不是一个好主意。但是你应该能够让它工作。尝试javax.annotation.Nullable改用。你可以在这里找到一个实现:

<dependency>
  <groupId>com.google.code.findbugs</groupId>
  <artifactId>jsr305</artifactId>
  <version>2.0.1</version>
  <type>jar</type>
</dependency>
于 2013-07-09T15:32:01.600 回答
2

myParam必须是一个(例如,因为它Integer覆盖了一个方法等)?如果不是,请考虑将其设置为不可为空Optional<Integer>的,Guice 应该能够处理。然后,您的提供者返回Optional.of(someValue)Optional.absent()

于 2013-07-09T15:15:41.620 回答