Instanciar classe generica dentro de outra classe generica. É possível?

1 resposta
ferracin

Olá bom dia, preciso de uma ajuda.

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???

será que fui claro, rsrsrsrs???

Desde já obrigado.

1 Resposta

WRYEL

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 :slight_smile:

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.

Criado 13 de setembro de 2012
Ultima resposta 13 de set. de 2012
Respostas 1
Participantes 2