No exemplo do bytebank, estou tentando fazer com que, se ao tentar criar uma conta ou cliente e essa conta ou cliente já existe, então não se deixar criar a conta ou cliente (por meio de Exceptions). Eu consegui fazer com que a mensagem "conta já existe" ou "cliente já existe" fosse mostrada. Porém o objeto já tinha sido criado, ou seja, quem usa o método main poderia ainda usar o cliente/conta normalmente. Construtor de conta:
// Atributos
private double saldo;
private int agencia;
private int numero;
private Cliente titular;
private static ArrayList<Conta> listaContas = new ArrayList<Conta>();
private static int totalContas;
// Construtor
public Conta(int agencia, int numero, Cliente titular) {
try {
this.agencia = agencia;
this.numero = numero;
if (Conta.listaContas.contains(this)) {
// this = null; // ???
throw new AlreadyExistsException("Conta já existe!");
} else {
this.titular = titular;
Conta.listaContas.add(this);
Conta.totalContas++;
}
} catch(AlreadyExistsException ex) {
System.out.println(ex.getMessage());
}
}
Eu sobreescrevi o método .equals() para que duas contas sejam iguais quando número e agência são iguais, assim:
@Override
public boolean equals(Object obj) {
Conta outra = (Conta) obj;
if (this.agencia != outra.agencia) {
return false;
}
if (this.numero != outra.numero) {
return false;
}
return true;
}
Eu tentei "apagar" o objeto com 'this = null', mas o compilador não deixa. Talvez eu pudesse não tratar o erro na construção, mas sim toda vez que fosse criar uma conta ou cliente, porém eu não sei se isso é muito elegante. Tem alguma forma eficiente de fazer o que eu quero?