1

@Named Integer値が適用されない状況で null 値を許可するパラメーターを 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.NullableGuice に含まれており、@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 に答える