Erro com java.lang.NullPointerException/java.lang.IllegalArgumentException

galera,

to criando uma classe Agenda1 que trabalha com uma coleção de objetos de outra classe Compromisso,
um dos métodos é o addCompromisso, e deve ter uma exceção caso o parametro seja igual a null,

até agora o método tá assim

public boolean addCompromisso(Compromisso compromisso) throws Exception{ if (compromisso.equals(null)) throw new Exception("VALOR INVÁLIDO."); agenda.add(compromisso); return true;

ja tentei de tudo, mas sempre quebra no teste do junit
na especificaçao do erro ele acusa isso

java.lang.Exception: Unexpected exception, expected<java.lang.IllegalArgumentException> but was<java.lang.NullPointerException>

alguem tem idéia do que seja?

Se compromisso é nulo, você não pode chamar o método equals dele. Simplesmente pq vc não pode chamar método nenhum do “nulo”.

public boolean addCompromisso(Compromisso compromisso) throws Exception{ if (compromisso == null) { throw new IllegalArgumentException("VALOR INVÁLIDO."); agenda.add(compromisso); return true; }

Só uma pergunta… quando esse método retorna false? Se a resposta é “nunca”, pq não faze-lo retornar void ou retornar this?

[quote=ViniGodoy]Se compromisso é nulo, você não pode chamar o método equals dele. Simplesmente pq vc não pode chamar método nenhum do “nulo”.

public boolean addCompromisso(Compromisso compromisso) throws Exception{ if (compromisso == null) { throw new IllegalArgumentException("VALOR INVÁLIDO."); agenda.add(compromisso); return true; }

Só uma pergunta… quando esse método retorna false? Se a resposta é “nunca”, pq não faze-lo retornar void ou retornar this?[/quote]
rodou aqui broder, valeu ae!

rapaz… eu to seguindo uma documentação,
lá tem dizendo pra ser boolean,

http://www.dsc.ufcg.edu.br/~raquel/lp2-2009.1/APIs/Agenda1.html#addCompromisso(Compromisso)

O que você quer dizer com “como eu faço para rodar”?

Sei lá eu, só sei como vc faz para usar esse método, desde que já tenha um compromisso criado:

agenda.addCompromisso(compromisso);

outra duvida rapida aqui

tem outro metodo listaCompromissos(estado) que vai varrer a 1a lista e pegar todos os objetos que tenham o parametro estado em comum e adicionar em uma 2a lista,
o problema é que os objetos na segunda lista tem que estar ordenados de acordo com a data,

ate agora o código tá assim,

public List<Compromisso> listaCompromissos(Estado estado) throws Exception{ if (estado==null) throw new IllegalArgumentException("VALOR INVÁLIDO."); List<Compromisso> lista = new ArrayList<Compromisso>(); for (Compromisso compromisso : agenda){ if (compromisso!=null){ if (compromisso.getEstado().equals(estado)) lista.add(compromisso); } } return lista;

pra ficar melhor, eis o metodo construtor da classe Compromisso

public Compromisso(String descricao, String local, Calendar data, Classificacao tipo, Prioridade prioridade) throws Exception{ if (descricao==null || local==null || data==null) throw new IllegalArgumentException("VALOR INVÁLIDO."); this.local = local; this.descricao = descricao; this.data = data; this.tipo = tipo; this.prioridade = prioridade; estadoAtual = Estado.A_CONFIRMAR; }

qualquer ajuda será bem vinda :slight_smile:

Primeiro de tudo. Segundo a documentação que você me passou, o método listaCompromisso não tem o throws Exception.
Depois, o método addCompromisso impede que compromissos nulos sejam adicionados à lista. Por isso, você não precisa verificar se aquela posição contém o valor null.

Só com isso, seu método já é simplificado para:

[code]
public List listaCompromissos(Estado estado) {
if (estado==null)
throw new IllegalArgumentException(“VALOR INVÁLIDO.”);

List lista = new ArrayList();
for (Compromisso compromisso : agenda){
if (compromisso.getEstado().equals(estado))
lista.add(compromisso);
}
return lista;
}[/code]

Me parece fazer bastante sentido que a classe Compromisso seja comparável por datas. Nesse caso, você teria que fazer

public class Compromisso implements Comparable<Compromisso> { public int compare(Compromisso outro) { return this.data.compare(outro.data); } }

Então, para retornar aquela lista ordenada, basta colocar antes de “return lista”:

Collections.sort(lista);

Ah sim, se vc não entendeu essa história de comparable, dá uma lida nesse post:
http://www.guj.com.br/posts/list/45985.java#241201