是否可以将 @AutoValue 与 Guice 的 FactoryModuleBuilder 一起使用?
Is it possible to use @AutoValue with Guice's FactoryModuleBuilder?
每 https://github.com/google/guice/wiki/AssistedInject,
假设我有一个接口 A
,实现了 class AImpl
和另一个我与 FactoryModuleBuilder 一起使用的接口 AFactory
-
..
install(new FactoryModuleBuilder()
.implement(A.class, AImpl.class)
.build(AFactory.class)
);
..
是否可以将 AutoValue 用于 AImpl
?我担心 AImpl
将是抽象的,工厂模块将无法实例化它。如果我将 AutoValue_AImpl
传递给工厂模块,它将不会有 @Assisted*
注释。
这些包不能很好地协同工作;更重要的是,没有理由您应该同时使用这两个功能。
AutoValue 通常会创建 数据对象 或 值对象 ,具有可靠的 equals
和 hashCode
实现。从 AutoValue 创建的对象是不可变的,使用静态工厂方法而不是构造函数; Guice 提供的依赖项没有空间或理由。见 the docs:
Using AutoValue limits your public creation API to static factory methods, not constructors. See Effective Java Item 1 for several reasons this is usually a good idea anyway.
AutoValue does not and will not support creating mutable value types. (We may consider adding support for withField-style methods, which return a new immutable copy of the original instance with one field value changed.)
FactoryModuleBuilder 通常为具有一些注入依赖项和一些手动指定依赖项的对象创建工厂。如上所述,AutoValue 包不应该符合此描述。
当然,您可以使用可从 Guice 访问的常量来构建您的值对象;但是,您需要通过编写自己的轻量级工厂对象来完成此操作,该对象根据需要将可注入参数映射到您的值对象的方法。
每 https://github.com/google/guice/wiki/AssistedInject,
假设我有一个接口 A
,实现了 class AImpl
和另一个我与 FactoryModuleBuilder 一起使用的接口 AFactory
-
..
install(new FactoryModuleBuilder()
.implement(A.class, AImpl.class)
.build(AFactory.class)
);
..
是否可以将 AutoValue 用于 AImpl
?我担心 AImpl
将是抽象的,工厂模块将无法实例化它。如果我将 AutoValue_AImpl
传递给工厂模块,它将不会有 @Assisted*
注释。
这些包不能很好地协同工作;更重要的是,没有理由您应该同时使用这两个功能。
AutoValue 通常会创建 数据对象 或 值对象 ,具有可靠的 equals
和 hashCode
实现。从 AutoValue 创建的对象是不可变的,使用静态工厂方法而不是构造函数; Guice 提供的依赖项没有空间或理由。见 the docs:
Using AutoValue limits your public creation API to static factory methods, not constructors. See Effective Java Item 1 for several reasons this is usually a good idea anyway.
AutoValue does not and will not support creating mutable value types. (We may consider adding support for withField-style methods, which return a new immutable copy of the original instance with one field value changed.)
FactoryModuleBuilder 通常为具有一些注入依赖项和一些手动指定依赖项的对象创建工厂。如上所述,AutoValue 包不应该符合此描述。
当然,您可以使用可从 Guice 访问的常量来构建您的值对象;但是,您需要通过编写自己的轻量级工厂对象来完成此操作,该对象根据需要将可注入参数映射到您的值对象的方法。