Ho una classe modello astratta generica. Ho pensato che se avessi creato produttori specifici per tipo, avrei potuto inserire alcuni servizi DAO direttamente nella classe generica. Ma non posso.Perché è impossibile iniettare classi generiche?
Perché? E come potrei aggirare questo?
abstract class MyView<T> {
@Inject
MyDao<T> dao;
//some more template methods that make use of the dao
void someMethod() {
dao.use();
}
}
class CustomerView extends MyView<Customer> {
//javax.enterprise.inject.AmbiguousResolutionException: Ambigious resolution
}
class DaoManager {
@Produces
MyDao<Customer> getDaoCustomer() {
return DaoFactory.make(Customer.class);
}
@Produces
MyDao<Product> getDaoProduct() {
return DaoFactory.make(Product.class);
}
}
Quando inietto esempio un @Inject MyDao<Customer> dao;
funziona perfettamente. Ma non con i farmaci generici ...
Come è implementato il tuo 'DaoFactory'? –
Si prega di definire "non funziona". Inoltre, come è '@ Inject MyDao dao;' non generico? –
Non funziona significa genera un'eccezione. Naturalmente MyDao è generico in una certa misura. Ancora mi piacerebbe iniettare un doa completamente generico con il metodo astratto. Non personalizzato. –
membersound