Iterator num ServletController

3 respostas
airmigjr

Pessoal, no código destacado abaixo tenho um problema:

No trecho do código seguinte:

Iterator iterator = lancamentos.iterator();

O Eclipse está apresentando um erro, dizendo que tenho que colocar um cast para lancamentos.

Ae, quando eu aceito a sugestão do Eclipse, é gerado o seguinte código substituindo o anterior, automaticamente:

Iterator iterator = ((Object) lancamentos).iterator();

Eu não tenho a menor idéia do que fazer com esse Object que fica selecionado após eu aceitar a sugestão do Eclipse.

Alguém sabe o que fazer nesse caso?

Obrigado,

airmigjr

Segue o código do Servlet:

package controle;

import io.LancamentoIO;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import modelo.Lancamento;

import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;


public class ServletController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}
	
	private void processaRequisicao(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		
		HttpSession sessao = request.getSession();
		List lancamentos = (List)sessao.getAttribute("lancamentos");
		
		String arquivo = this.getServletContext().getRealPath("/WEB-INF/lancamentos.txt");
		LancamentoIO io = new LancamentoIO(arquivo);
		
		Iterator iterator = lancamentos.iterator();
		while(iterator.hasNext()){
			Lancamento lancamento = (Lancamento)iterator.next();
			io.gravarRegistro(lancamento);
		}
		
		DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
		formatter.setLenient(false);
		
		Cookie ckUltimaGravacao = new Cookie("DataUltimaGravacao", formatter.format(new Date()));
		ckUltimaGravacao.setMaxAge(60*60*24*7);
		response.addCookie(ckUltimaGravacao);
		
		RequestDispatcher view=request.getRequestDispatcher("resultado.jsp");
		view.forward(request, response);
		
	}

}

3 Respostas

B

O import do List está errado, o correto é

import java.util.List;

Uma dica, se estiver trabalhando com uma versão do Java igual ou superior a 1.5, trabalhe com objetos tipados. Ficaria desta maneira:

List<Lancamento> lista = (List<Lancamento>) sessao.getAttribute("lancamentos"); Iterator<Lancamento> it = lista.iterator(); while (it.hasNext()) { Lancamento lancto = it.next(); }

airmigjr

Caro biro,
muito obrigado pelas informações. Você me ajudou muito.
Sem querer abusar, deixe-me perguntar:
Vc falou em trabalhar com objetos tipados. Poderia exemplificar com um modelo mais simples para mim, ou me indicar alguma literatura a respeito? Eu tenho percebido que alguns programadores realmente utilizam , mas não entendi muito bem o porque até agora.

Muito obrigado,

airmigjr

B

Você evita ter que fazer cast. Desta maneira o compilador já espera um objeto do tipo que você declarou, por exemplo

List<Usuario> list = new ArrayList<Usuario>(); Pessoa pessoa = new Pessoa(); list.add(pessoa);

Este código gerará um erro de compilação, pois o método add() espera um objeto do tipo Usuario, pois você definiu assim.
É bacana pra evitar erros em tempo de execução (ClassCastException) e garantir sempre o mesmo tipo de objeto na sua lista.

Abrs.

Criado 1 de março de 2012
Ultima resposta 5 de mar. de 2012
Respostas 3
Participantes 2