我试图在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上发现的类似问题不幸是非建设性的或不适用的。有什么想法吗?
答案 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()
。