2013-07-09 74 views
1

我試圖創建一個吉斯參數@Named Integer允許空值的情況下,在沒有值適用於工作:吉斯:@Nullable拒絕與@Named

@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; 
} 

不幸的是,吉斯似乎並不喜歡這樣的:

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

@Nullable annota我正在使用的是com.google.inject.internal.Nullable,它包含在Guice中,確實有@Retention(RetentionPolicy.RUNTIME)

我在堆棧溢出中找到的類似問題不幸的是無構造或不適用。有任何想法嗎?

+0

嘗試將@Nullable添加到提供者方法。 – efan

回答

2

是否myParam必須是Integer(例如,因爲它覆蓋了一個方法等)?如果不是,請考慮將它作爲不可空的Optional<Integer>,Guice應該能夠處理。您的提供商然後返回Optional.of(someValue)Optional.absent()

+0

由於其他建議似乎不適合我,出於某種原因,我會放棄原因,並簡單地放棄'null'以支持您的建議。 :) – Smallhacker

+0

另請參見['OptionalBinder'](https://google.github.io/guice/api-docs/4.1/javadoc/com/google/inject/multibindings/OptionalBinder.html)。 – dimo414

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>