我正在使用 Guice 进行依赖注入(inject),但出现此错误:

1) Could not find a suitable constructor in java.lang.Void. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.
  at java.lang.Void.class(Void.java:44)
  while locating java.lang.Void
  at com.myfeed.algorithm.clusterer.tree.wrapper.ItemSourceTreeWrapperFactory.create(ItemSourceTreeWrapperFactory.java:1)

特别奇怪的是它提到了java.lang.Void。

这是 模块代码 :(我将类绑定(bind)到自身,而不是类的接口(interface))
install(new FactoryModuleBuilder().implement(
     new TypeLiteral<ItemSourceTreeWrapper<Document>>(){}, ItemSourceTreeWrapper.class
).build(new TypeLiteral<ItemSourceTreeWrapperFactory<Document>>(){}));

这是 ItemSourceTreeWrapper 构造函数 :
@Inject
public ItemSourceTreeWrapper(@Assisted Tree<Item<Source>> treeToWrap, @Assisted ItemGroup itemGroup, Itemizer<Source> itemizer, SourceItemConverterFactory sourceItemConverterFactory) {
    this.treeToWrap = treeToWrap;
    this.itemizer = itemizer;
    sourceItemConverter = sourceItemConverterFactory.create(itemGroup, itemizer);
}

这是 工厂接口(interface) :
public interface ItemSourceTreeWrapperFactory<Source> {
    public void create(Tree<Item<Source>> treeToWrap, ItemGroup<Source> itemGroup);
}

最佳答案

您对 implement() 的调用看起来很可疑 - 因为 ItemSourceTreeWrapper 是通用的,所以第二个参数应该使用 TypeLiteral<> 。此外,由于您自己实现了一个类,因此您应该能够完全省略 implement() 调用。

但您的实际问题是在 ItemSourceTreeWrapperFactory 中, public void create(...) 可能应该是 public ItemSourceTreeWrapper<Source> create(...)

关于java - Guice: "Could not find suitable constructor"当在 FactoryBuilder 中提供合适的构造函数时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23680901/

10-11 06:49