作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 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);
}
这是工厂界面:
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/
我正在使用 Guice 进行依赖项注入(inject),但出现此错误: 1) Could not find a suitable constructor in java.lang.Void. Clas
我是一名优秀的程序员,十分优秀!