2013-07-09 5 views
1

Я пытаюсь создать параметр @Named Integer в Guice, что позволяет нулевые значения для случаев, когда значение не применимо:Guice: @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; 
} 

к сожалению, Guice, кажется, не нравится это:

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 to provider. – efan

ответ

2

Должно быть myParam должно быть Integer (например, потому что это переопределение метода и т. Д.)? Если нет, подумайте о том, чтобы сделать его недействительным Optional<Integer>, с которым должен справиться Guice. Затем ваш провайдер возвращает Optional.of(someValue) или Optional.absent().

+0

Поскольку, по некоторым причинам, для меня почему-то не работают, я поддаюсь рассуждениям и просто откажусь от «нулевого» в пользу вашего предложения. :) – 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> 
Смежные вопросы