Tipos abstratos inseridos em tempo de execução

4 respostas
J

Bom, primeiramente obrigado antecipadamente se alguem responder.

To com um probleminha aqui no uso de tipo generico.

Resumidamente:

Meu programa vai ter uma entrada (JOptionPane) onde o usuário vai digitar um tipo do java (Integer, String, etc).
Em seguida, quero criar uma List tipada com esse tipo digitado pelo usuário.

Obs.: A verificação se a classe digitada é ou não válida será feita pelo java.lang.reflect.*

Vamos ao "codigo exemplo" (ou quase isso xD)

public static void main(String[] args) {
		
		Object tipo = JOptionPane.showInputDialog("Digite um tipo...");
		List<tipo> l = new List(); //<-- Essa linha não vai compilar inicialmente...		
		
	}

Bom, estou aberto a sugestões. Esse problema consegui resolver em C#, mais Java não faço ideia se é possivel.

4 Respostas

Hebert_Coelho

Não entendi muito bem, mas…

Pq vc não faz sua lista do tipo List ?

Se o que a pessoa vai estar entrando é uma String vc pode fazer List.

Se vc quer ter uma de cada tipo, vc terá que fazer muuuito if else! [=

J

Daria pra fazer isso sim, mais a idéia é usar reflect pra evitar os if..else, e não usar Object pra ver a potência do Java nesses casos.

EDIT:
public static void main(String[] args) {
		
		Object tipo = JOptionPane.showInputDialog("Digite um tipo...");
		
		Class c;
		try{
			c = Class.forName((String)tipo);
		}catch(Exception e){
			e.printStackTrace();
		}
		
		List<c> l = new List<c>();
	}
Eis a duvida... Ele não me deixa passar nem objeto, nem classe, nem instância de classe, nem absolutamente nada que consigo usar da classe reflect...
dev.rafael

O q vc quer fazer é impossível! Se vc tem uma lista tipada e tipo é determinado apenas em runtime, como vc pretende criar variáveis p/ lidar com essas informações? Tipo Object?? Nesse caso a sua List poderia ser de Objects. Ademais, não tem um meio de vc criar um List de tipo determinado em runtime, Java é staticamente tipado. As informações de tipo devem estar presentes em tempo de compilação. Talvez vc consiga fazer o q vc quer usando uma linguagem de tipagem dinâmica como Python ou Ruby.

Ryu

Exatamente,

Na declaração de um Generic você não pode passar uma referência à um objeto, e sim uma classe.

Isso ocorre por Java ser tipificada estaticamente.

Criado 28 de setembro de 2010
Ultima resposta 28 de set. de 2010
Respostas 4
Participantes 4