3
respostas

Get e setter de referência

Prezados,

No exemplo do banco encapsulamento eu copiei uma classe Conta que possui o método saca.Nesse método eu coloquei uma mensagem informando o valor depositado, o titular da conta e o saldo, conforme transcrição:

public void deposita(double valor) {

this.saldo += valor; System.out.println("Foi depositado " + valor + " na conta " + this.titular + " e o seu saldo atual é " + saldo);

}

Depois de ter colcoado o atributo Titular como privado, ao invocar o método deposita, o atributo está sendo carregado como null. na execução da classe TestagetSetter.java. A dúvida é a seguinte: como faço para carregar no nome do Titular, sendo que a classe Cliente não possui o método main, e portanto, o mesmo não será instanciado dentro da classe Conta? Coloquei todas as classes do projeto para melhorar a compreensão.

Conta. java

public class Conta {

    private double saldo;
    private int agencia;
    private int numero;
    private Cliente titular;


    public double getSaldo() {

        return this.saldo;

    }

    public int getAgencia( ) {

        return this.agencia;
    }

     public void setAgencia(int agencia ) {

         this.agencia = agencia;
     }


     public int getNumero() {

         return this.numero;
     }


     public void setNumero (int numero) {

         this.numero = numero;
     }

     public Cliente getTitular() {
        return titular;
    }

     public void setTitular(Cliente titular) {
        this.titular = titular;
    }

    public void deposita(double valor) {

        this.saldo += valor;
        System.out.println("Foi depositado " + valor + " na conta " + this.titular + " e o seu saldo atual é " + saldo);

    }

    public boolean saca (double valor) {

        if (this.saldo >= valor) {

            this.saldo -= valor;

            System.out.println("Foi retirado " + valor + "e o seu saldo atual é " + saldo);

            return true;
        } else {
            System.out.println("Faltou dinheiro");
            return false;

        }


    }

    public boolean transfere (double valor, Conta destino) {

        if (this.saldo >= valor) {

            this.saldo -= valor;

            destino.deposita(valor);

            System.out.println("Foi transferido " + valor + " da conta " + this.titular +
                    "para a conta " + destino.titular );
            return true;

        }
        else {
            System.out.println("Faltou dinheiro");
            return false;
        }

        }




}

public class Cliente {

private String nome; private String cpf; String profissao;

public String getNome() {

return this.nome;

}

public void setNome(String nome) {

this.nome = nome;

}

public String getCpf() { return cpf; }

public void setCpf(String cpf) {

this.cpf = cpf; } }

/-------------------------------------------------------------------------------------/

public class TestaGetSetter {

public static void main (String [] args) {

Cliente Alberto = new Cliente();

Alberto.setNome("Alberto Nunes"); Alberto.setCpf("831.470.635-34");

Conta contadoAlberto = new Conta();

contadoAlberto.setAgencia(8212); contadoAlberto.setNumero(158201);

contadoAlberto.deposita(1500.0);

contadoAlberto.setTitular(Alberto);

System.out.println("Agencia: " + contadoAlberto.getAgencia() + " Numero conta: " + contadoAlberto.getNumero() + " Titular: " + contadoAlberto.getTitular().getNome() + " Saldo: " + contadoAlberto.getSaldo());

}

}

3 respostas

Bom dia, para capturar o nome use "this.titular.getNome()"

    public void deposita(double valor) {

        this.saldo += valor;
        System.out.println("Foi depositado " + valor + " na conta " +
         this.titular.getNome() + " e o seu saldo atual é " + saldo);

    }

Na classe de teste use setTitular() antes de deposita() para funcionar

public class TestaGetSetter {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
...
        contadoAlberto.setTitular(Alberto);
        contadoAlberto.deposita(1500.0);
...

Na verdade o null aparece quando a String não possuí referenciamento. Basta voce referenciar a conta ao cliente na hora de criar a conta e na hora de usar o Getter no metodo deposita:

Conta.java

public void deposita(double valor) {
        this.saldo = this.saldo + valor;

        System.out.println("Foi depositado " + valor + " na conta " 
                + this.getTitular().getNome() + " e o seu saldo atual é " + saldo);
    }

Referenciando Ciente a Conta no TestaSetter:

TestaSetter.java

        Conta conta = new Conta();

        Cliente paulo = new Cliente(); 
        paulo.setNome("paulo silveira");
        conta.setTitular(paulo);

        conta.deposita(1200);

Sempre faça um teste unitário antes de passar para o setter de outros atributos, isso é muito importante para que você consigo identificar o erro de forma rápida e fácil.

Espero ter ajudado.

Abraços.

Fiz o teste e funcionou. Muito obrigado pela ajuda!