首页 > 解决方案 > Google Guice 绑定不适用于 Integer 和 Long

问题描述

使用 Google Guice 时出错。

在 java.lang.Long 中找不到合适的构造函数。类必须有一个(并且只有一个)用@Inject 注释的构造函数或一个非私有的零参数构造函数。在 java.lang.Long.class

class DIModule extends AbstractModule {
   protected void configure(){
      bind(Long.class).annotatedWith(Names.named("seconds")).toInstance(1574965800000L);
   }
}

使用 lombok 作为构造函数

@AllArgsConstructor (onConstructor_ = { @Inject })
class Cat{
   @Named("seconds")
   private Long time;
}

但以下一项工作没有错误。

class Cat{
  private Long time;
  @Inject
  public Cat(@Named("seconds") Long time){
     this.time = time;
  }
}

有人可以解释一下如何使它与龙目岛一起工作吗?

标签: javadependency-injectionguice

解决方案


您应该能够通过添加到您的lombok.config文件,@Named将字段上的所有注释实例复制到相应的构造函数参数,如下所示:lombok.copyableAnnotations

lombok.copyableAnnotations += com.google.inject.name.Named

推荐阅读