NullPointerException: objeto.getClass() e genérico

2 respostas
Patricia_HelloWorld

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á.

public class Repositorio {
	
	public Repositorio(){
		
	}
	
	private static Map<Object,Object> banco = new HashMap<Object, Object>();
public static Collection<Object> lista(Object oo) {
		Class klass=oo.getClass();//ERRO AQUI! NULLPOINTEREXCEPTION!
		Collection<Object> c = new ArrayList<Object>();
		for (Object o : banco.values()) {
			if (o.getClass() == klass)
				c.add(o);
		}
		return c;
	}
}

public static Collection<Object> lista(Class klass) {
		Collection<Object> c = new ArrayList<Object>();
		for (Object o : banco.values()) {
			if (o.getClass() == klass)
				c.add(o);
		}
		return c;
	}//outras coisas
}
public class Relatorio {
	
	Relatorio(){
	}
	
	Collection getC(Achavel o){
		return Repositorio.lista(o);
	}
}
Collection getMotoristas(){
		return  Repositorio.lista(Motorista.class);
	}
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!!");
	}

}
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.<Motorista>achaT(motoristaProcurado, motorista, "Motorista");
	}

2 Respostas

gledson85
public class Repositorio {   
       
    public Repositorio(){   
           
    }   
       
    private static Map<Object,Object> banco = new HashMap<Object, Object>();   
public static Collection<Object> lista(Object oo) {   
        Class klass=oo.getClass();//ERRO AQUI! NULLPOINTEREXCEPTION!   
        Collection<Object> c = new ArrayList<Object>();   
        for (Object o : banco.values()) {   
            if (o.getClass() == klass)   
                c.add(o);   
        }   
        return c;   
    }   
}   // SUA CLASSE ESTÁ SENDO FECHADA AQUI E AINDA  CÓDIGO ABAIXO DESTA CHAVE!
  
public static Collection<Object> lista(Class klass) {   
        Collection<Object> c = new ArrayList<Object>();   
        for (Object o : banco.values()) {   
            if (o.getClass() == klass)   
                c.add(o);   
        }   
        return c;   
    }//outras coisas   
}

Coloquei um comentário onde possa estar o problema. Qual IDE vc está usando?

Patricia_HelloWorld

ah nao isso foi vacilo msm na hora de colar o código.
To usando o Eclipse ms nao é esse o problema não…

Vou procurar outra maneira de resolver o problema.

vlw

Criado 14 de outubro de 2007
Ultima resposta 15 de out. de 2007
Respostas 2
Participantes 2