List< com duas classes

10 respostas
simberg

List list_dt = new ArrayList(); (ContatoDefesa é um javabean)

Sei fazer o List para uma classe, mas quando quiser fazer uma listagem com vários banco de dados diferentes?

O List permite isso?

tipo: List<ContatoDefesa & ContatoCandidatos> etc. Sei q essa sintaxe está errada, era só para me explicar…

Obrigado

10 Respostas

_Renatu

Isso não dá pra fazer. O que você pode fazer é ter uma interface ou superclasse comum aos dois.
Por exemplo, no seu caso, uma classe Contato e suas classes herdando dela.

aí você pode utilizar:

List&lt;Contato&gt; lista = new ArrayList&lt;Contato&gt;();
Contato c1 = new ContatoDefesa();
Contato c2 = new ContatoCandidatos();
lista.add(c1);
lista.add(c2);
fiaux

Ou faz uma lista sem dizer o tipo de classe que ela suporta, como era antes, e coloca qualquer coisa lá dentro. O problema é a falta de controle. Ou declara ela como List, o que é feio.
Nenhuma das opções é recomendável. Talvez você poderia usar um Map.

abelgomes

pois é a falta de controle é um problema no caso ai de cima…

ou vc cria um novo objeto com os tipos dos objetos que queres fazer a lista…sacou?

tipo:

public class MyList{

private MeuTipo1;

private MeuTipo2;

}

List…

sacou…fica meio estranho…mas vale…ou pode fazer

igual ao _Renatu falou…:wink:

lidianycs

Melhor tentar!

Usar um Map :
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Map.html

Ou um HashMap :
http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html
:smiley:

dlt

se suas classes ContatoDefesa e ContatoCandidatos extendessem ou implementassem uma classe comum, tipo

ContatoDefesa extends Contato, ContatoCandidato extends Contato

voce poderia fazer

List<? extends Contato> listaContatos = …

List nao funcionaria

mais infos sobre generics -> generics

simberg

Deu certo!!

Valeu rapaziada.

Criei a superclasse Contato, estendi para as outras classes.

Obrigado.

simberg

Agora tô com um problema mais simples:

Listlist_cc = new ArrayList();

while(rs.next()){

Contato c1=new ContatoDefesa();

Contato c2=new ContatoCandidatos();

Contato c3=new ContatoProfessores();

Contato c4=new ContatoLocal();
c1.setData(rs.getDate("data"));
	c1.setHorario(rs.getTime("horario"));
	c2.setNome_aluno(rs.getString("nome_aluno"));
	c2.setTitulo(rs.getString("titulo"));
	c2.setTipo(rs.getBoolean("tipo"));
	c3.setNome_professor(rs.getString("nome_professor"));
	c4.setDescricao(rs.getString("descricao"));

	list_cc.add(c1);
	list_cc.add(c2);
 	list_cc.add(c3);
	list_cc.add(c4);
	}
	
	rs.close();
	stmt.close();
	return list_cc;

Ao tentar gerar a lista, ele faz uma confusão repetindo campos, porém sem dados, se eu colocar como comentário todos os c?, deixando apenas c1, o resultado dá certinho na busca da lista.
Desse jeito:
3 registros só c1 ativado - data e horario:

Nome do Aluno: Horario:12:00:00 Nome do Professor:
Título: Local: Data:2008-07-30
Nome do Aluno: Horario:12:00:00 Nome do Professor:
Título: Local: Data:2008-08-01
Nome do Aluno: Horario:13:00:00 Nome do Professor:
Título: Local: Data:2008-08-01

Ativando agora c2, com nome_aluno (apenas)

Nome do Aluno: Horario:12:00:00 Nome do Professor:
Título: Local: Data:2008-07-30
Nome do Aluno:Amanda Croissant Horario: Nome do Professor:
Título: Local: Data:
Nome do Aluno: Horario:12:00:00 Nome do Professor:
Título: Local: Data:2008-08-01
Nome do Aluno:Carlos Merlot Camarão Horario: Nome do Professor:
Título: Local: Data:
Nome do Aluno: Horario:13:00:00 Nome do Professor:
Título: Local: Data:2008-08-01
Nome do Aluno:Rosa Horario: Nome do Professor:
Título: Local: Data:


Apenas 3 registros, mas aparece como se fossem 6, porém vazios.

Tô vendo um jeito se alguém puder me ajudar agradeceria muito.

dlt

cole seu codigo entre as tags code.

o que é rs?

acho que o que vc quer é algo parecido com:

Contato c = null; while(rs.hasNext()) { c = rs.next(); }

simberg

dlt — Vai o início do código que está no DAO.

public ListgetLista_cc() throws SQLException{

PreparedStatement stmt= this.connection.prepareStatement(“SELECT…”);

ResultSet rs=stmt.executeQuery();
List<Contato>list_cc = new ArrayList<Contato>();
	while(rs.next()){
	Contato c1=new ContatoDefesa();
	Contato c2=new ContatoCandidatos();
	Contato c3=new ContatoProfessores();
	Contato c4=new ContatoLocal();

.
.
.

página jsp (visualização)

<jsp:useBean id=“dao” class=“br.direito.defesas.dao.ContatoDAO” />

<c:forEach var="contato" items="${dao.lista_cc}">
Nome do Aluno:${contato.nome_aluno} Horario:${contato.horario} Nome do Professor:${contato.nome_professor} Título:${contato.titulo} Local:${contato.descricao} Data:${contato.data}
simberg

Consegui.

Como eu tinha feito a superclasse, instanciei ela e fiz toda referência para ela, simples.

Obrigado, quem passar pelo mesmo problema pode resolver dessa forma.

Criado 7 de agosto de 2008
Ultima resposta 11 de ago. de 2008
Respostas 10
Participantes 6