0

ジェネリック型で区別されるさまざまなオブジェクトのリストを挿入したいと思います。

表示したい ContentPanels (Jpanel のサブタイプ) のリストを受け入れる MainView があります。

ので、私は持っています

@Inject
MainView(List<ContentPanel<?>> contentPanel){
   ...
}

コンテンツ パネルは一般的なタイプが異なるため、書籍用、映画用などがあります。

私はそれらをバインドしようとしました

bind(new TypeLiteral<AbstractContentPanel<Book>>(){})
        .to(new TypeLiteral<BookContentPanel<Book>>(){})
        .in(Singleton.class);

bind(new TypeLiteral<AbstractContentPanel<Movie>>(){})
            .to(new TypeLiteral<BookContentPanel<Movie>>(){})
            .in(Singleton.class);

しかし、それらのリストを作成して MainView に挿入するにはどうすればよいですか?

4

1 に答える 1

4

すべてのバインディングをリストに挿入したい場合、それはできません。リストを注入したい場合は、次のように直接バインドする必要があります。

bind(new TypeLiteral<List<String>>() {})
  .toInstance(new ArrayList<String>());

ただし、この場合、リストは事前にわかっている必要があります (または を介し​​て提供されますProvider)。

シーケンスを介してバインディングにアクセスする場合は、multibinding extensionを使用する必要があります。その場合、コードは次のようになります。

Multibinder<ContentPanel<?>> multibinder = Multibinder.newSetBinder(binder(), new TypeLiteral<ContentPanel<?>>() {});
multibinder.addBinding().to(YourContentPanelImpl1.class);
multibinder.addBinding().to(YourContentPanelImpl2.class);
// and so on

そして、次を注入できますSet

@Inject
MainView(Set<ContentPanel<?>> contents) {
    ...
}
于 2013-08-26T18:47:55.190 に答える