2

假设我有一个简单的 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 来轻松地使用 AutoFactory @Provided

你知道让这两个代码生成器一起工作的方法吗?

4

1 回答 1

1

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

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

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

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

这是另一个生效的问题,因为需要对构造函数参数进行适当的注释。所以@Provided@Nullable或者任何@Qualifier注释都需要在那里添加。这里最大的问题是,@Provided定义@Target(PARAMETER)和使用自动值我们只定义方法。

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

于 2017-03-19T16:11:49.717 回答