在 class 中绕过两个 @AssistedInject
Get around two @AssistedInject in a class
我有一个 java class 有两个构造函数使用两个 @AssistedInject 使用不同的参数。我知道这是不允许的,我们有什么解决办法吗?这个class是一个助手class,所以整个项目都在使用它,我不想为我正在编写的新逻辑创建一个单独的助手class。我不喜欢将辅助参数作为参数传递给使用它的内部方法。
@Singleton
Class Apple {
}
Class Assistant {
private final Apple apple;
private List<Fruits> rawFruits;
private List<Fruits> ripeFruit;
@AssistedInject
A(final Apple apple, @Assisted List<Fruits> rawFruits) {
this.apple = apple;
this.rawFruits = rawFruits;
}
@AssistedInject
A(final Apple apple, @Assisted final List<Fruits> rawFruits,@Assisted final List<Fruits> ripeFruits) {
this.apple = apple;
this.rawFruits = rawFruits;
this.ripeFruits = ripeFruits;
}
public Fruit getRipeFruits() {
return ripeFruits.get(0);
}
public interface Factory {
A create(List<Fruits> rawFruits);
A create(List<Fruits> rawFruits, List<Fruits> ripeFruits>)
}
}
GuiceModule
class Module extends AbstractModule {
@Override
protected void configure() {
install(new FactoryModuleBuilder.build(A.Factory.class));
}
}
完全允许有多个@AssisgedInject
构造函数。
你的问题是你有两个相同类型的 @Assisted
参数。当这种情况发生时,你必须写这样的东西来消除它们的歧义:
@AssistedInject
A(final Apple apple,
@Assisted("raw") List<Fruits> rawFruits,
@Assisted("ripe") List<Fruits> ripeFruits) {
}
public interface Factory {
A create(@Assisted("raw") List<Fruits> rawFruits,
@Assisted("ripe") List<Fruits> ripeFruits);
}
我有一个 java class 有两个构造函数使用两个 @AssistedInject 使用不同的参数。我知道这是不允许的,我们有什么解决办法吗?这个class是一个助手class,所以整个项目都在使用它,我不想为我正在编写的新逻辑创建一个单独的助手class。我不喜欢将辅助参数作为参数传递给使用它的内部方法。
@Singleton
Class Apple {
}
Class Assistant {
private final Apple apple;
private List<Fruits> rawFruits;
private List<Fruits> ripeFruit;
@AssistedInject
A(final Apple apple, @Assisted List<Fruits> rawFruits) {
this.apple = apple;
this.rawFruits = rawFruits;
}
@AssistedInject
A(final Apple apple, @Assisted final List<Fruits> rawFruits,@Assisted final List<Fruits> ripeFruits) {
this.apple = apple;
this.rawFruits = rawFruits;
this.ripeFruits = ripeFruits;
}
public Fruit getRipeFruits() {
return ripeFruits.get(0);
}
public interface Factory {
A create(List<Fruits> rawFruits);
A create(List<Fruits> rawFruits, List<Fruits> ripeFruits>)
}
}
GuiceModule
class Module extends AbstractModule {
@Override
protected void configure() {
install(new FactoryModuleBuilder.build(A.Factory.class));
}
}
完全允许有多个@AssisgedInject
构造函数。
你的问题是你有两个相同类型的 @Assisted
参数。当这种情况发生时,你必须写这样的东西来消除它们的歧义:
@AssistedInject
A(final Apple apple,
@Assisted("raw") List<Fruits> rawFruits,
@Assisted("ripe") List<Fruits> ripeFruits) {
}
public interface Factory {
A create(@Assisted("raw") List<Fruits> rawFruits,
@Assisted("ripe") List<Fruits> ripeFruits);
}