Olá!
Estou utilizando uma fábrica que utiliza reflection para criar implementações específicas da interface Manager. Manager é uma interface genérica parametrizada (utiliza type parameter).
public interface Manager <T extends Entity> {
. . .
}
ManagerFactory é uma fábrica de implementações específicas de Manager’s que estão de acordo com um certo tipo de Entity.
[code]public final class ManagerFactory {
. . .
/**
* Cria sob demanda a implementação de <tt>Manager</tt> definida
* para o tipo de <tt>Entity</tt>. . .
*/
public synchronized Manager getManager(final Class<? extends Entity> entity) {
. . .
Manager domainManager = null;
if (cache.containsKey(domainManagerClass)) {
return cache.get(domainManagerClass);
} else {
try {
domainManager = domainManagerClass.newInstance();
} catch (Exception ex) {
throw new ManagerFactoryException(ex);
}
cache.put(domainManagerClass, domainManager);
}
return domainManager;
}
}[/code]
O problema é que essa fábrica não específica o o parâmetro de tipo para Manager. Então, ao invés de retornar Manager<Cliente> clientManager = ...
ela retorna apenas Manager clientManager = ...
E isso é péssimo, pois eu perco as vantagens de usar Generic, que é type safety, e ganho uns três bilhões de warnings por todo o código.
Alguma luz?



