我試圖根據ParameterizedType來選擇一個bean。 Google Guice相關解決方案的答案看起來非常多,但Java EE 7可以解決這個問題嗎?基於類型參數的Java EE注入
public interface Handler<T> { ... }
@ApplicationScoped StringHandler implements Handler<String> { ... }
@ApplicationScoped IntegerHandler implements Handler<Integer> { ... }
然後在其他一些管理的Bean:
@Inject private Instance<Handler<?>> handlers;
public <T> Handler<T> handlerFor(Class<T> handledClass)
{
// ???
}
因此,這裏是在實例中的選擇方法,涉及到類型:
<U extends T> Instance<U> select(TypeLiteral<U> subtype, Annotation... qualifiers);
而對於TypeLiteral的Javadoc只是說,你可以做像
TypeLiteral<List<String>> stringListType = new TypeLiteral<List<String>>() {};
這是非常無益的,因爲我不知道編譯時的類型。不過,我確實有Class對象作爲類型參數參數。
看來,Guice可以通過爲你構造TypeLiteral對象來處理這個問題。 Java EE 7中沒有類似的工具嗎?
任何你不能做的原因'@Inject Handler handler'? –
2014-11-15 16:42:51
@John由於類型擦除,如果我使用類型參數並且不知道注入哪一個,容器將不會在運行時知道類型。我很想在運行時將它傳遞給Class,但是沒有選擇(...)。 – Silvaran 2014-11-19 00:43:08
你想要注入的課程是什麼樣的? – 2014-11-20 12:31:49