0

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<>; を使用した補助パラメーターの例が見つかりませんでした。ただし、たとえば、このパラメーターを整数に変更しても、同じエラーが発生します。

4

1 に答える 1