簡體   English   中英

吉斯注入通用清單

[英]Guice injecting a generic list

我想注入一個與它們的泛型類型不同的各種對象的列表。

我有一個MainView接受要顯示的ContentPanels(Jpanel的子類型)列表。

所以我有

@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中呢?

如果要將所有綁定注入列表中,則不能這樣做。 如果要插入列表,則應將其直接綁定,如下所示:

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) {
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM