@Nullable似乎不适用于@AssistedInject

dur*_*597 2 java nullable guice assisted-inject

我有一个看起来像这样的构造函数:

@Inject
public MyClass(
        @Named("config") String configFile,
        @Named("template") String templateFile,
        CachedSettings settings,
        @Assisted String channelId,
        @Nullable @Assisted("NetworkA") NetworkInterface localNetworkInterfaceA,
        @Nullable @Assisted("NetworkB") NetworkInterface localNetworkInterfaceB) {
Run Code Online (Sandbox Code Playgroud)

我得到以下错误(两次,每个参数一次)

1) null returned by binding at my.company.package.MyClassFactory.create()
 but parameter 4 of my.company.package.MyClass.<init>() is not @Nullable
  while locating java.net.NetworkInterface annotated with @com.google.inject.assistedinject.Assisted(value=NetworkA)
   for parameter 4 at my.company.package.MyClass.<init>(MyClass.java:24)
  while locating my.company.package.MyClass annotated with interface com.google.inject.assistedinject.Assisted
Run Code Online (Sandbox Code Playgroud)

知道什么是错的吗?我在这个问题上发现了另外两个问题,其中一个说这是一个依赖性问题,我认为我没有,另一个说这是一个Eclipse问题,我确实使用过,但我刷新,清理并重建了我的问题. maven项目从头开始,所以我不确定问题是什么.

我正在使用javax.annotation.Nullable,它应该在运行时保留.我还应该尝试什么?

kon*_*ity 6

@Nullable需要在构造函数和工厂声明上设置.我们FactoryModuleBuilder用来申报我们的工厂.我正在粘贴适合我们的相关代码

构造函数:

@Inject
public AddressActions(EC2Service ec2Service,
                      RequestFactory requestFactory,
                      @Assisted("spiceManager") SpiceManager spiceManager,
                      @Assisted("parent") Context parent,
                      @Assisted("publicIp") @Nullable String publicIp) {
Run Code Online (Sandbox Code Playgroud)

抽象工厂:

public static interface Factory {
    AddressActions create(@Assisted("spiceManager") SpiceManager spiceManager,
                          @Assisted("parent") Context context,
                          @Assisted("publicIp") @Nullable String publicIp);
}
Run Code Online (Sandbox Code Playgroud)

工厂模块构建器:

install(new FactoryModuleBuilder().build(AddressActions.Factory.class));
Run Code Online (Sandbox Code Playgroud)

电话:

AddressActions actions = actionsFactory.create(spiceManager, getSherlockActivity(), null);
Run Code Online (Sandbox Code Playgroud)

相关版本:

  • 吉斯: guice-3.0-no_aop.jar
  • AssistedInject: guice-assistedinject-3.0.jar
  • JSR305: jsr305-1.3.9.jar

-k