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