Pessoal,
a situaçao é a seguinte: tenho um repositório de dados em memória q guarda todos os objetos da minha aplicação, entre eles, Motorista. O repositório tem um método lista, q recebe um objeto, pega a classe dele e retorna uma coleção de tds os objetos da msm classe q ele. Aí é q tá o erro, pq msm com um objeto q tenho certeza q está no repositório ele dé um nullpointerException…Qnd eu uso o segundo método lista(em Relatório), passando Motorista.class como parâmetro, ele funciona.
A classe Acha implementa um método genérico que procura um objeto específico de acordo com a descrição passada na classe PreenchePav.
O que eu não entendo é pq tá dando esse NullPointerException no repositório.
Não sei se vai dar pra entender a situação (o projeto tem muito mais classes). Desculpa a formatação inadequada…
obrigada desde já.
[code]public class Repositorio {
public Repositorio(){
}
private static Map<Object,Object> banco = new HashMap<Object, Object>();
public static Collection lista(Object oo) {
Class klass=oo.getClass();//ERRO AQUI! NULLPOINTEREXCEPTION!
Collection c = new ArrayList();
for (Object o : banco.values()) {
if (o.getClass() == klass)
c.add(o);
}
return c;
}
}
public static Collection lista(Class klass) {
Collection c = new ArrayList();
for (Object o : banco.values()) {
if (o.getClass() == klass)
c.add(o);
}
return c;
}//outras coisas
}[/code]
[code]public class Relatorio {
Relatorio(){
}
Collection getC(Achavel o){
return Repositorio.lista(o);
}
}
Collection getMotoristas(){
return Repositorio.lista(Motorista.class);
}[/code]
[code]public class Acha {
//método genérico
public static <T extends Achavel> void achaT(String coisaProcurada,Achavel coisaSubstituida,String erro)throws IllegalArgumentException{
for (Object o: new Relatorio().getC(coisaSubstituida))
T m = (T)o;
if (m.getDescricao().equalsIgnoreCase(coisaProcurada))
coisaSubstituida = m;
}
if (coisaSubstituida==null)
throw new IllegalArgumentException(erro+" inválido!!");
}
}[/code]
[code]public class PreenchePav{
PreenchePav(){//é ruim botar exceção no construtor???
try{
pedeData();
achaMotorista();
pav = new Pav(dtAbastecimento,motorista, etc…);
salvaObj();
}
catch(IllegalArgumentException e){
System.out.println(e.getMessage());
}
}
//usa o método genérico
//motorista é um Achavel (interface)
void achaMotorista()throws IllegalArgumentException{
System.out.println("Motorista: ");
motoristaProcurado = Keyboard.readString();
Acha.achaT(motoristaProcurado, motorista, “Motorista”);
}[/code]