Eai galera, sou novo aqui no GUJ ! Estou com um probleminha em Java, se alguém puder me ajudar agradeço !! É o seguinte, estou usando o HashMap para incluir uns objetos pra salvar em um arquivo, os objetos tem um identificador que uso para passar como chave no hasMap e o Valor que seria o próprio objeto. Quando vou usar o método get, passo a chave, mas o método retorna null. Eu debuguei o projeto e vi que o objeto é encontrado no arquivo, carregado parao hashMap tudo certo mas retorna null. Também já sobrescrevi os métodos equals() e hashcode() no objeto que coloco no hashMap, mas nada adiantou.
Collections
3 Respostas
Sem ver seu código, fica difícil supor o que está errado. Geralmente, não é preciso mexer com equals() e hashcode(). Um exemplo:
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
new Ideone().executar();
}
public void executar(){
Map<String, ClasseProHashMap> mapa = new HashMap<String, ClasseProHashMap>();
ClasseProHashMap cp1 = new ClasseProHashMap("Primeiro", "Joao", 100);
ClasseProHashMap cp2 = new ClasseProHashMap("Segundo", "Jose", 200);
mapa.put("Primeiro", cp1);
mapa.put("Segundo", cp2);
ClasseProHashMap testandoGet = mapa.get("Segundo");
testandoGet.imprimir();
ClasseProHashMap testandoGetErrado = mapa.get("ChaveErrada");
testandoGetErrado.imprimir(); // erro, porque nao existe objeto para esta chave
}
class ClasseProHashMap{
String chave;
String nome;
int valor;
public ClasseProHashMap(String c, String n, int v){
this.chave = c;
this.nome = n;
this.valor = v;
}
public void imprimir(){
System.out.println("Chave: " + chave + " Nome: " + nome + " Valor: " + valor);
}
}
}
Veja em http://ideone.com/ZWhgDm .
Abraço.
Então TerraSkilll, descobri que o problema ocorre quando recupero o objeto do arquivo. Veja como fiz pra recuperar:
public Map<Integer,E> ler() {
Map<Integer,E> lista = new HashMap<>();
E objAux;
try(ObjectInputStream lerArquivo = new ObjectInputStream(new FileInputStream(arquivo))){
while((objAux = (E)lerArquivo.readObject())!=null){
lista.put((Integer) (objAux.toString()), objAux);
}
}catch(IOException | ClassNotFoundException e){
return lista;
}
return lista;
}
Mas ainda não sei o motivo pelo retorno nulo. Sobrescrevi o método toString() pra retornar uma string com o id do objeto, ai como pode ver eu só faço um cast. Se puder dar uma avaliada no código agradeço !! abraço.
Está caindo no Exception? Se sim, então a lista vai retornar vazia mesmo.
Se não, o retorno do readObject() é um objeto válido? Já debugou para ver o que está sendo retornado para a variável objAux ? Tentou retornar um objeto concreto ao invés do E (generics)?
Abraço.