Collections Java - Interface List

Java

27/11/2018

Bom dia, eu estou criando um codigo pra estudar Java, mas to tendo um problema. Eu tenho minha classe abstrata Conta, e duas classes concretas que extendem Conta, que sao ContaCorrente e ContaPoupanca, e ai eu tenho dentro da minha classe Conta um metodo chamado Existe, que recebe uma colecao do tipo List e um objeto do tipo Conta, onde eu verifico se essa Conta ja existe na minha colecao: se existe eu retorno falso, senao eu adiciono na minha colecao.
Mas por exemplo na minha classe Principal, como que eu faco pra chamar esse metodo a partir da minha variavel de referencia que eh do tipo da Interface List.

import java.util.List;

public abstract class Conta {
	
	private String id;
	private double saldo;
	private Cliente cliente;
	private double limite;
	
	public Conta(String id, Cliente cliente) {
		this.id = id;
		this.saldo = 0.0;
		this.limite = 1000.0;
		this.cliente = cliente;
	}
	
	public String getId() {
		return this.id;
	}
	
	public double getSaldo() {
		return this.saldo;
	}
	
	public double getLimite() {
		return this.limite+this.saldo;
	}
	
	public void setSaldo(double valor) {
		this.saldo+=valor;
	}
	
	public void exibirDadosDaConta(Conta conta) {
		System.out.println("Conta: "+conta.getId());
		System.out.println("Saldo: "+conta.getSaldo());
		System.out.println("Limite: "+conta.getLimite());
		conta.cliente.exibeDados(cliente);
	}
	
	public abstract boolean saca(double valor);
	
	public abstract void deposita(double valor);
	
	public abstract void transferePara(double valor, Conta c);
	
	public boolean equals(Object obj) {
		if(obj == null) {
			throw new NullPointerException("Objeto passado nulo");
		}if(!(obj instanceof Conta)) {
			return false;
		}else {
			Conta conta = (Conta)obj;
			return this.getId().equals(conta.getId());
		}
	}
	
	public boolean existe(List<Conta> x, Conta y) {
		if(x.contains(y)) {
			System.out.println("Ja existe uma conta para o ID cadastrado");
			return false;
		}else {
			x.add(y);
			System.out.println("Conta adicionada ao sistema");
			return true;
		}
	}
}


import java.util.List;

public class ContaCorrente extends Conta{
	
	public ContaCorrente(String id, Cliente cliente) {
		super(id, cliente);
	}
	
	public boolean saca(double valor) {
		if((getLimite()+getSaldo())>=valor){
			setSaldo(getSaldo()-valor);
			System.out.println("Saque realizado");
			return true;
		}else {
			throw new SaldoInsuficienteException("Saldo Insuficiente para saque");
		}
	}
	
	public void deposita(double valor) {
		if(valor<0) {
			throw new IllegalArgumentException("Deposite apenas valores maiores que 0");
		}else {
			setSaldo(getSaldo()+valor);
			System.out.println("Deposito realizado");
		}
	}
	
	public void transferePara(double valor, Conta c) {
		if(c == null) {
			throw new NullPointerException("Conta a receber o valor nao esta iniciada");
		}else {
			c.setSaldo(getSaldo()+valor);
			this.setSaldo(getSaldo()-valor);
			System.out.println("Transferencia realizada");
		}
	}
}

import java.util.List;

public class ContaPoupanca extends Conta{
	
	public ContaPoupanca(String id, Cliente cliente) {
		super(id, cliente);
	}
	
	public boolean saca(double valor) {
		if((getLimite()+getSaldo())>=valor){
			setSaldo(getSaldo()-valor);
			System.out.println("Saque realizado");
			return true;
		}else {
			throw new SaldoInsuficienteException("Saldo Insuficiente para saque");
		}
	}
	
	public void deposita(double valor) {
		if(valor<0) {
			throw new IllegalArgumentException("Deposite apenas valores maiores que 0");
		}else {
			setSaldo(getSaldo()+valor);
			System.out.println("Deposito realizado");
		}
	}
	
	public void transferePara(double valor, Conta c) {
		if(c == null) {
			throw new NullPointerException("Conta a receber o valor nao esta iniciada");
		}else {
			c.setSaldo(getSaldo()+valor);
			this.setSaldo(getSaldo()-valor);
			System.out.println("Transferencia realizada");
		}
	}
}



import java.util.List;
import java.util.ArrayList;

import java.util.Scanner;

public class CaixaEletronicoMain {

	public static void main(String[] args) {
		
		Cliente cliente1 = new Cliente("143-260-527-59","Wendel");
		Cliente cliente2 = new Cliente("896-727-637-00","Claudio");
		List <Conta> contas = new ArrayList<Conta>();
		Conta conta1 = new ContaCorrente("123-0", cliente1);
		Conta conta2 = new ContaCorrente("456-0", cliente2);

	}

}
Wendel Rios

Wendel Rios

Curtidas 0

Melhor post

Marcio Souza

Marcio Souza

28/11/2018

Mas por exemplo na minha classe Principal, como que eu faco pra chamar esse metodo a partir da minha variavel de referencia que eh do tipo da Interface List.

Como assim o método existe() é do tipo List?
    public static void main(String[] args) {
        Cliente cliente1 = new Cliente("143-260-527-59","Wendel");
        Cliente cliente2 = new Cliente("896-727-637-00","Claudio");
        List<Conta> contas = new ArrayList<Conta>();
        Conta conta1 = new ContaCorrente("123-0", cliente1);
        conta1.existe(contas, conta1);        
        Conta conta2 = new ContaCorrente("456-0", cliente2);
        conta2.existe(contas, conta2);
    }


Quer ver uma coisa bacana? No método existe(List, Conta), não precisa passar Conta como argumento, já que o método faz parte da classe. Use o this, que remete a instancia da classe que você criou.

Na classe abstrata:
public boolean existe(List<Conta> x) {
if(x.contains(this)) {
System.out.println("Ja existe uma conta para o ID cadastrado");
return false;
}else {
x.add(this);
System.out.println("Conta adicionada ao sistema");
return true;
}
}


    public static void main(String[] args) {
        Cliente cliente1 = new Cliente("143-260-527-59","Wendel");
        Cliente cliente2 = new Cliente("896-727-637-00","Claudio");
        List<Conta> contas = new ArrayList<Conta>();
        Conta conta1 = new ContaCorrente("123-0", cliente1);
        conta1.existe(contas);        
        Conta conta2 = new ContaCorrente("456-0", cliente2);
        conta2.existe(contas);

        // testa se as contas já existem
        conta1.existe(contas);
        conta2.existe(contas);
    }

GOSTEI 1

Mais Respostas

Wendel Rios

Wendel Rios

27/11/2018

Nao, na vdd oq eu quis dizer foi que minha variavel de referencia para a minha colecao eh do tipo List. No exemplo acima eh a variavel "contas", so que nao consigo chamar o metodo Existe em tempo de compilacao. Queria saber como chamar esse metodo usando minha variavel "contas".
A respeito da assinatura do metodo Existe, eh pq eu queria adicionar os objetos da colecao a partir desse metodo, entende.
E uma duvida a respeito do uso de Generics, no momento q nos declaramos a nossa variavel de referencia, a boa pratica eh declararmos como a classe mais generica ou a mais especifica ?
GOSTEI 0
Wendel Rios

Wendel Rios

27/11/2018

Nao, na vdd oq eu quis dizer foi que minha variavel de referencia para a minha colecao eh do tipo List. No exemplo acima eh a variavel "contas", so que nao consigo chamar o metodo Existe em tempo de compilacao. Queria saber como chamar esse metodo usando minha variavel "contas".<br />
A respeito da assinatura do metodo Existe, eh pq eu queria adicionar os objetos da colecao a partir desse metodo, entende.<br />
E uma duvida a respeito do uso de Generics, no momento q nos declaramos a nossa variavel de referencia, a boa pratica eh declararmos como a classe mais generica ou a mais especifica ?
<br />
<br />
Ah sim, entendi oq vc quis dizer em relacao ao metodo, nao tinha entendido direito.
GOSTEI 0
POSTAR