Jump to content

[Resolvido] Erro no metodo"put"


DRS

Recommended Posts

Boas pessoal, estou aqui com um problema...

import java.util.*;
import java.io.*;
import java.lang.*;
//A classe Banco vai conter o nome do Banco como String (nomeBanco), e uma variável de instância (contas)
//que vai associar a cada numero de conta a informação da conta bancária respectiva, sendo portanto,
//idealmente um HashMap do tipo HashMap<String,Conta>
public class Banco implements Serializable{

//Variáveis de instância
private HashMap<String, Conta> contas; // Numero de Conta "String" (Key) e instância/Objecto "Conta" (value)
private String nomeBanco;

//Construtor que apenas inicializa HashMap da conta bancaria
public Banco(String nome){
contas = new HashMap<String,Conta>();
nomeBanco = nome;
}

//Construtor que copia um HashMap parametro para a variável de instância
public Banco(HashMap<String,Conta> cts, String nome){
contas = new HashMap<String, Conta>();
nomeBanco = nome;
//Para colocar um novo "Map" numa instância "HashMap" usamos o metodo "put(K,V)"
//Para buscar os "Dados" do "valor" de uma instância "HashMap" usamos o metodo "values()"
for(Conta cb: cts.values()){
contas.put(cb.getNumConta(), cb.clone());
}
}

//Se tivessemos varios tipos de "Contas", usariamos a superclasse abstracta "Conta" e criariamos
//varias subclasses desta, assim para o anterior construtor, fariamos a seguinte implementação:
//"public Banco(HashMap<String, ?extends Conta> cts, String nome)"

//Número total de contas
public int numContas(){ return contas.size(); }

//Nome actual do banco
public String getNomeBanco(){ return nomeBanco; }

//Muda nome do Banco
public void mudaNmBanco(String nvNm){ nomeBanco = nvNm; }

//Retorna a informação da "Conta" bancaria com o numero indicado (Pag.319)
/*public Conta daConta(String numConta){
return contas.get(numConta).clone();
}*/

}

error: no suitable method found for put(String,Object)

contas.put(cb.getNumConta(), cb.clone());

^

method HashMap.put(String,Conta) is not applicable

(actual argument Object cannot be converted to Conta by method invocation conversion)

Já pesquisei mas não encontro nada na net que me ajude neste, se alguém poder me explicar fico mt agradecido...

Edited by apocsantos
geshi
Link to comment
Share on other sites

Boa noite,

Estás a invocar o metodo clone do objecto cb, para colocares um objecto do tipo conta no hashmap ? Fiquei meio perdido com a lógica que estás a usar, porque o metodo clone devolve um objecto "vazio", apenas com a estrutura do proprio objecto.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

Não colocando .clone() compila correctamente..

Pelo que percebi o metodo clone apenas devolve a copia da estrutura do objecto e não uma copia completa do objecto, certo?

Ao não fazer clone e deixar apenas "put(cb.getNumConta(), cb);"

, não teremos 2 instâncias HashMaps cada um com um "Map" a apontar para o mesmo objecto certo?

Ou sejam ficamos com 2 Objectos iguais mas correspondências diferentes...

Link to comment
Share on other sites

Boa tarde,

Sim o metodo clone, apenas devolve a estrutura do objecto (shalow copy).

Se utilizares apenas

put(cb.getNumConta(), cb);

estás a colocar um objecto do tipo conta com a key sendo um objecto string cujo valor é o valor devolvido pelo metodo getNumConta do objecto cb, e o value é o objecto cb. Na pratica adicionas um elemento ao HashMap.

Aqui fico com uma duvida, o teu objectivo é percorrer um hashmap existente, e copiar o conteudo para outro ?? Se for isso porque não usar um ciclo for each ??

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

Boa tarde,

Tens razão em relação ao foreach, eu confundi por momentos linguagens... é o que dá estar a programar C# num monitor e a responder a posts noutro.

Uma vez que já tens o problema resolvido podes publicar a solução para outros que tenham o mesmo problema a possam encontrar.

Memo to self: Não te distraias! Trabalha! 🙂

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.