在 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);
}