如何将@AutoFactory 与@AutoValue class 一起使用?
How can I use @AutoFactory with an @AutoValue class?
假设我有一个简单的 AutoValue class:
@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 class,我可以通过注释 CommonDependency @Provided
.
简单地使用 AutoFactory
您知道让这两个代码生成器协同工作的方法吗?
这确实是一个很有趣的问题,因为@AutoFactory
注解只能应用于非抽象classes。
error: Auto-factory doesn't support being applied to abstract classes.
对于带注释的构造函数,编译器失败后甚至没有有用的错误消息。
由于在代码生成过程中只有 abstract
或 final
自动值 class,我们必须注释最后一个和最后一个 class .为此,您必须实现一个自动值扩展,它 mustBeFinal()
并使用 @AutoFactory
注释注释 class 声明或最终 class 的构造函数。
这里还有一个问题生效了,因为构造函数的参数需要适当的注解。因此需要在此处添加 @Provided
、@Nullable
或任何 @Qualifier
注释。这里最大的问题是,@Provided
定义了 @Target(PARAMETER)
并且使用自动值我们只定义方法。
如果不想自己实现,可以尝试使用auto-value-factory
。我在这个过程中实现了它,以查看两个自动库如何协同工作。
假设我有一个简单的 AutoValue class:
@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 class,我可以通过注释 CommonDependency @Provided
.
您知道让这两个代码生成器协同工作的方法吗?
这确实是一个很有趣的问题,因为@AutoFactory
注解只能应用于非抽象classes。
error: Auto-factory doesn't support being applied to abstract classes.
对于带注释的构造函数,编译器失败后甚至没有有用的错误消息。
由于在代码生成过程中只有 abstract
或 final
自动值 class,我们必须注释最后一个和最后一个 class .为此,您必须实现一个自动值扩展,它 mustBeFinal()
并使用 @AutoFactory
注释注释 class 声明或最终 class 的构造函数。
这里还有一个问题生效了,因为构造函数的参数需要适当的注解。因此需要在此处添加 @Provided
、@Nullable
或任何 @Qualifier
注释。这里最大的问题是,@Provided
定义了 @Target(PARAMETER)
并且使用自动值我们只定义方法。
如果不想自己实现,可以尝试使用auto-value-factory
。我在这个过程中实现了它,以查看两个自动库如何协同工作。