Por exemplo, tenho uma classe dao generica hibernate: DaoGenerico<T, Seriazable> e uma outra TableDataController.
É possivel eu instanciar a classe DaoGenerico dentro da table TableDataController? com isso eu quando instanciasse o TableDataController passando minha classe Bicicicleta.class por exemplo ele ja passaria a bicicleta tambem para o Dao???
Existe uma maneira de acessar os tipo genéricos passados para uma classe, mas eu pessoal, acho isso uma maneira bem feia, pois gera alguns warns
segue exemplo:
// precisa ser extendida, se vc tentar instanciar em tempo de execução e tentar acessar os tipos parametrizados, o java não conseguirá enxergalos.
public abstract class DAOGenerico<T, ID extends Serializable> {
public T createEntityInstance() {
try {
ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();
Class<T> klass = (Class<T>) parameterizedType.getActualTypeArguments()[0];
return klass.newInstance();
} catch (Exception e) {
return null;
}
}
}
public class UsuarioDAO extends DAOGenerico<Usuario, Integer> {
}
//teste:
public class Main {
public static void main(String[] args) {
UsuarioDAO usuarioDAO = new UsuarioDAO(); //aqui poderia ser uma factory, que retorna um DAOGenerico<T, ?>* ... *esse interrogação também não é de meu agrado ...
Usuario usuario = usuarioDAO.createEntityInstance();
System.out.println("Usuario: " + usuario);
}
}
É questão de opinião, mas, geralmente componentes muito “Generico” fica dificil de dar aquela manutenção específica. Eu prefiro sempre ter uma base e depois fazer um extends. Não to em casa agora, se não conseguir fazer o que quer, chegando em casa eu faço e posto o fonte aqui.