Java 在一节课上练习两个@AssistedInject

Java 在一节课上练习两个@AssistedInject,java,guice,Java,Guice,我有一个java类,它有两个构造函数,使用两个@AssistedInject获取不同的参数。我知道这是不允许的,我们有什么解决办法吗?这个类是一个助手类,所以它在整个项目中都被使用,我不想为我正在编写的新逻辑创建一个单独的助手类。我不喜欢将辅助参数作为参数传递给使用它的内部方法 @Singleton Class Apple { } Class Assistant { private

我有一个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));
}
}
@Singleton
苹果类{
}
助教{
私人最终苹果;
私人水果清单;
私人名单柚子;
@助教项目
A(最后一个苹果,@Assisted List rawFruits){
这个苹果=苹果;
this.rawFruits=rawFruits;
}
@助教项目
A(最终苹果,@辅助最终列表生水果,@辅助最终列表ripeFruits){
这个苹果=苹果;
this.rawFruits=rawFruits;
this.ripeFruits=ripeFruits;
}
公共水果{
返回ripefruit.get(0);
}
公共接口工厂{
创建(列表);
创建(列出原始水果,列出ripeFruits>)
}
}
GuiceModule
类模块扩展了抽象模块{
@凌驾
受保护的void configure(){
安装(新的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);
}
@AssistedInject
最后一个苹果,
@辅助(“生”)列表生水果,
@辅助(“成熟”)列表(ripeFruits){
}
公共接口工厂{
创建(@Assisted(“raw”)列表,
@协助(“成熟”)名单;
}

您的问题似乎与中的“同一类型的多工厂方法”用例相匹配。你收到错误信息了吗?或者你有任何其他理由相信这不起作用吗?@Jeff Bowman:我收到一条错误信息。我相信,我们不能在一堂课上有两个助教科目。请粘贴您的准确错误信息;您所描述的应该可以工作,任何错误都会与Guice文档相矛盾。(还请注意,构造函数参数列表中的参数修饰符为“private”,这是不允许的。)很抱歉,我没有意识到我在参数中添加了private,我已经修复了它。。我将粘贴错误。错误:未绑定Assistant$Factory的实现。查找$Factory Assistant时,有多个用@AssistedInject注释的构造函数与方法助手$Factory.create()中的参数匹配。查找有效的ASISSTANT时无法创建辅助对象工厂。我遗漏了两件事,@Assisted用于构造函数中的一个参数和您提到的解决方案。谢谢