Guice:@Nullable拒绝使用@Named

时间:2013-07-09 15:11:46

标签: java dependency-injection guice nullable

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

@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上发现的类似问题不幸是非建设性的或不适用的。有什么想法吗?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

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