【问题标题】:@Nullable doesn't seem to work with @AssistedInject@Nullable 似乎不适用于 @AssistedInject
【发布时间】:2013-04-10 16:18:47
【问题描述】:

我有一个如下所示的构造函数:

@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) {

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

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

知道有什么问题吗?我在这个问题上发现了另外两个问题,其中一个说是dependency issue,我认为我没有,另一个说是Eclipse issue,我确实使用过,但我刷新、清理和从头开始重建我的 maven 项目,所以我不确定问题出在哪里。

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

【问题讨论】:

    标签: java guice nullable assisted-inject


    【解决方案1】:

    @Nullable 需要在构造函数和工厂声明中设置。我们使用FactoryModuleBuilder 来声明我们的工厂。我正在粘贴对我们有用的相关代码

    构造函数:

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

    抽象工厂:

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

    工厂模块构建器:

    install(new FactoryModuleBuilder().build(AddressActions.Factory.class));
    

    来电:

    AddressActions actions = actionsFactory.create(spiceManager, getSherlockActivity(), null);
    

    相关版本:

    • 吉斯:guice-3.0-no_aop.jar
    • 辅助注入:guice-assistedinject-3.0.jar
    • JSR305:jsr305-1.3.9.jar

    -k

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 2023-04-06
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多