在课堂上找到两个@AssistedInject

时间:2016-02-23 17:13:36

标签: java guice

我有一个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));
}
}

1 个答案:

答案 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);
}