我有一个java类,有两个构造函数,两个@AssistedInject使用不同的参数。我知道这是不允许的,我们有任何解决方法吗?这个类是一个助手类,所以它在整个项目中使用,我不想为我正在编写的新逻辑创建一个单独的助手类。我不希望将辅助参数作为参数传递给使用它的内部方法。
@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));
}
}
答案 0 :(得分:1)
完全允许拥有多个@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);
}