【问题标题】:How can I use @AutoFactory with an @AutoValue class?如何将 @AutoFactory 与 @AutoValue 类一起使用?
【发布时间】:2017-06-19 22:16:54
【问题描述】:

假设我有一个简单的 AutoValue 类:

@AutoValue abstract class Foo {
  abstract CommonDependency commonDep();
  abstract String uniqueDataPerInstance();

  static Foo create(CommonDependency commonDep, String data) {
    return new AutoValue_Foo(commonDep, data);
  }
}

现在我想要一个工厂,所以我每次想要一个 Foo 时都不需要传递 commonDep。如果这不是 AutoValue 类,我可以通过注释 CommonDependency @Provided 来轻松地使用 AutoFactory。

您知道如何让这两个代码生成器很好地协同工作吗?

【问题讨论】:

    标签: java auto-value autofactory


    【解决方案1】:

    这确实是一个很有趣的问题,因为@AutoFactory注解只能应用于非抽象类。

    错误:自动工厂不支持应用于抽象类。

    对于带注释的构造函数,在编译器失败后甚至没有有用的错误消息。

    由于在代码生成过程中只有abstractfinal 自动值类,我们必须注释最后一个也是最后一个类。为此,您必须实现一个自动值扩展,它 mustBeFinal() 并使用 @AutoFactory 注释来注释类声明或最终类的构造函数。

    这里还有一个问题生效,因为构造函数参数需要适当的注解。所以@Provided@Nullable 或任何@Qualifier 注释需要添加到那里。这里最大的问题是,@Provided 定义了@Target(PARAMETER),而我们只定义了方法。

    如果您不想自己实现,可以尝试使用auto-value-factory。我在这个过程中实现了它,以了解两个自动库如何协同工作。

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2010-12-09
      • 1970-01-01
      相关资源
      最近更新 更多