0

アシスト インジェクションを使用して clientfactory からプルする複数のプレゼンター ウィジェットがあります。

public interface FieldFactory {

    TextboxPresenterWidget createTextBoxWidget(Field field);
    BooleanPresenterWidget createBooleanWidget(Field field);
        ...
}

これは現在正常に動作しますが、私がやりたいのは、具体的に呼び出さなくても必要なウィジェットを作成できるようにすることです。代わりに、正しい PresenterWidget を取得するために注入の一部としてそのタイプを渡すことができます。

各「フィールド」オブジェクトには、それがどのタイプの列挙型プロパティがあります...方法があるかどうか、どうすればこれを行うことができるか疑問に思っています。

できれば、私の工場は次のようになります。

public interface FieldFactory {

    TextboxPresenterWidget create(Field field, FieldType type);
    BooleanPresenterWidget create(Field field, FieldType type);
        ...
}

これにより、impl コードは次のようになります。

...
for(Field field : fields) {
    addToSlot(SLOT_NAME, fieldFactory.create(field, field.getType()));
}
...

ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

0

列挙値はswitch…caseとにかくどこかで実行する必要があります。手動でコーディングするよりも生成することを好むことは理解できますが、GINはそれを実行せず、おそらくもっと必要になります(またはスイッチコード自体よりも少なくとも同じ数の構成コード。

では、補助注入工場に任せる手書きの工場はどうでしょうか?

public class FieldFactory {
  @Inject AssistedFieldFactory factory;

  public PresenterWidget create(Field field) {
    switch (field.getType()) {
    case TEXTBOX:
      return factory.createTextBoxWidget(field);
    case BOOLEAN:
      return factory.createBooleanWidget(field);
    default:
      throw new IllegalArgumentException();
    }
  }
}
于 2013-06-18T09:23:08.967 に答える