Dúvida no código

6 respostas Resolvido
X

pessoal, eu gostaria que vocês me tirassem uma dúvida a respeito desse codigo

public class RepositorioContas implements Serializable {
    private static RepositorioContas instance;
private ArrayList<Conta> contas;

private RepositorioContas() {
    this.contas = contas;
}
    
 private static RepositorioContas getInstance(){
     if(instance == null){
         instance = lerDoArquivo();
     }
     
     return instance;
 }
 
 private static RepositorioContas lerDoArquivo() {
	RepositorioContas instancia = null;
	File in = new File("contas.txt");
	FileInputStream fis = null;
	ObjectInputStream ois = null;
	try {
		fis = new FileInputStream(in);
		ois = new ObjectInputStream(fis);
		Object o = ois.readObject();
		instancia = (RepositorioContas) o;
	} catch (Exception e) {
		instancia = new RepositorioContas();
	} 
            return instancia;
}

public void salvarArquivo() {

if (instance == null) {

return;

}

File out = new File(contas.txt);

FileOutputStream fos = null;

ObjectOutputStream oos = null;

try {

fos = new FileOutputStream(out);

oos = new ObjectOutputStream(fos);

oos.writeObject(instance);

} catch (Exception e) {

e.printStackTrace();

}

}

}

eu tenho uma dúvida a respeito do metodo getInstance(), se instance == null como vou ler algo que é null? sinceramente não consegui entender a logica dessa parte em específico

6 Respostas

X

classe conta

public class Conta {

private String numero;

private double saldo;
public Conta(String numero, double saldo) {
    this.numero = numero;
    this.saldo = saldo;
}



public String getNumero() {
    return numero;
}

public void setNumero(String numero) {
    this.numero = numero;
}

public double getSaldo() {
    return saldo;
}

public void setSaldo(double saldo) {
    this.saldo = saldo;
}}
I
public void salvarArquivo(){
	if (instance == null){
		return;
	}
	
	File out = new File(contas.txt);
	FileOutputStream fos = null;
	ObjectOutputStream oos = null;
	
	try{
		fos = new FileOutputStream(out);
		oos = new ObjectOutputStream(fos);
		oos.writeObject(instance);
		
	}catch(Exception e){
		e.printStackTrace();
	}
}

Se instance == null, então o método salvarArquivo é finalizado (já que o return termina a execução qualquer método). Caso instance não seja igual a null, então o restante do bloco será executado.

X

então quer dizer que quando instance for == null o arquivo é salvo?

se sim, como isso pode acontecer? ja que é null? confesso que não entendo

X

seria porque no bloco catch do metodo lerDoArquivo ele instancia um objeto de repositorioContas? daí a instancia precisa ser == null,por conta do padrão singleton?

I
Solucao aceita

Achei que tivesse sido bem explícito. Mas vou melhorar a explicação:

Quando instance não for igual a null (instance != null), então executa:

File out = new File(contas.txt);
FileOutputStream fos = null;
ObjectOutputStream oos = null;

try{
	fos = new FileOutputStream(out);
	oos = new ObjectOutputStream(fos);
	oos.writeObject(instance);
}catch(Exception e){
	e.printStackTrace();
}

Daí as classes FileOutputStream, ObjectOutputStream e o método writeObject (da classe ObjectOutputStream) fazem o seu trabalho. Se ocorrer algum erro, uma exceção é lançada.
Caso seja igual a null (instance == null) o método é simplesmente finalizado (return é só usado para interromper a execução do método, já que a função é void, ou seja, não tem retorno). Isso significa que o controle do programa é devolvido ao objeto chamador (quem invocou o método salvarArquivo()) e a execução do programa continua normalmente.
Quanto ao método getInstance():

private static RepositorioContas getInstance(){
	if(instance == null){
		instance = lerDoArquivo();
	}
 
	return instance;
}

Há simplesmente uma verificação. Se nenhuma instancia foi criada, ou seja, instance == null, então a variável instance recebe dados retornados pelo método lerDoArquivo(), isto é, a variável instance é inicializada. Por fim, o método retorna a variável instance que é do tipo RepositorioContas.

Para mais detalhes sobre essas classes, por favor, consulte a documentação (Docs Oracle - Java SE 10).

X

agora sim entendi!! obrigado pela explicação.

na minha cabeça ele estava querendo ler uma instância de RepositorioContas que é igual a null.

agora ficou claro para mim

Criado 30 de novembro de 2019
Ultima resposta 1 de dez. de 2019
Respostas 6
Participantes 2