Guice の使用方法を学習し始めたばかりで、アシスト インジェクションの設定に問題があります。私は次のインターフェースを持っています:
public interface Individual extends Comparable<Individual>, Iterable<Long>{ ... }
工場での作成になります。コンストラクターは long のリストを受け取る必要があります。
public interface IndividualFactory {
public Individual createIndividual(List<Long> chromossomes);
}
実装クラスには、リストを受け取る @Assisted パラメータがあります。
public class IndividualImpl implements Individual {
@Inject
public IndividualImpl(
ConfigurationService configurationService,
RandomService randomService,
FitnessCalculatorService fitnessService,
@Assisted List<Long> chromossomes
) { ... }
最後に、これが私のモジュール クラスです。
public class SimpleModule extends AbstractModule {
@Override
protected void configure() {
bind(Individual.class).to(IndividualImpl.class);
install(new FactoryModuleBuilder().implement(Individual.class,
IndividualImpl.class).build(IndividualFactory.class));
}
問題は、プロジェクトを実行すると次のエラーが表示されることです。
1) No implementation for java.util.ArrayList<java.lang.Long> annotated with @com.google.inject.assistedinject.Assisted(value=) was bound.
while locating java.util.ArrayList<java.lang.Long> annotated with @com.google.inject.assistedinject.Assisted(value=)
for parameter 3 at implementation.entities.IndividualImpl.<init>(IndividualImpl.java:25)
at SimpleModule.configure(SimpleModule.java:36)
アシストされたパラメーター (注釈だけでなくパラメーター自体) を削除するだけで、すべて正常に動作します。何が間違っているのかわかりません。見つけたすべての Guice チュートリアルに従いましたが、List<>; を使用した補助パラメーターの例が見つかりませんでした。ただし、たとえば、このパラメーターを整数に変更しても、同じエラーが発生します。