Melhor pratica para instanciar classe

Olá pessoal.
Estou com a seguinte duvida com relação à melhor pratica a ser seguida com relação ao codigo a seguir:

Tenho uma classe que é uma especie de Loader de registros de um determinado CSV necessário ao meu sistema comforme abaixo:

package registros;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class CarregaRegistros {
	private static ArrayList<Registro> listaderegistros = new ArrayList<Registro>();

	public CarregaRegistros(String pathcsv) {
		BufferedReader br = null;
		try {
			File fr = new File(pathcsv);
			br = new BufferedReader(new InputStreamReader(new FileInputStream(fr), "ISO-8859-1"));
			String linha = "";
			while ((linha = br.readLine()) != null) {
				String nmcliente       = linha.split(";", -1)[0];
				String nrdocumento     = linha.split(";", -1)[1];
				String nrcontrato      = linha.split(";", -1)[2];
				String nmemail         = linha.split(";", -1)[3];
				String nrfone01chris   = linha.split(";", -1)[4];
				String nrfone02        = linha.split(";", -1)[5];
				String nrfone03        = linha.split(";", -1)[6];
				String nrfone04        = linha.split(";", -1)[7];
				String nrfone05        = linha.split(";", -1)[8];
				String linha_digitavel = linha.split(";", -1)[9];
				String valor_fatura    = linha.split(";", -1)[10];
				String valor_minimo    = linha.split(";", -1)[11];
				String dias_atraso     = linha.split(";", -1)[12];
				listaderegistros.add(new Registro(nmcliente, nrdocumento, nrcontrato, nmemail, nrfone01chris, nrfone02, nrfone03, nrfone04, nrfone05, linha_digitavel, valor_fatura, valor_minimo, dias_atraso));

			}
			br.close();

		} catch (Exception ex) {
			System.out.println("Erro ao ler o arquivo CSV.\n)" + ex.getMessage());
		}

	}

	public static ArrayList<Registro> getListaderegistros() {
		return listaderegistros;
	}
}

e abaixo a maneira como uso essa classe classe:

package amain;

import java.util.ArrayList;
 
import org.apache.http.util.Asserts;
 
import registros.CarregaRegistros;

public class TesteMenus {
	public static void main(String[] args) {
 
		new CarregaRegistros("C:\\Users\\erdna\\Desktop\\Tribanco_Amig_0402.csv");
		 

	}

}

Como podem ver eu apenas dou um

new CarregaRegistros("C:\\Users\\erdna\\Desktop\\Tribanco_Amig_0402.csv");

Como a minha lista de registros é estatica dentro da classe CarregaRegistros e eu só preciso carregar ela no inicio do programa eu fiz desta maneira para quando eu precise acessar um registro desta classe de qualquer outra classe do programa eu faço a chamada do metodo estático CarregaRegistros.getListaderegistros() e terei o array de registros em memoria para buscar o registro que eu precisar.

A duvida é:

Esta certo fazer desta maneira? É certo iniciar uma classe apenas dando um
new CarregaRegistros("C:\\Users\\erdna\\Desktop\\Tribanco_Amig_0402.csv");

Se está errado qua a melhor prática para carregar dados estáticos em memória na inicialiização de um programa.

Desde já obrigado por toda a ajuda.

Se você realmente quer usar a lista como estática, não precisa de uma instância da classe. Em vez de carregar o arquivo no construtor da classe, crie um método estático para carregar a lista, e remova o construtor. Esse método pode retornar a lista carregada ou preencher a variável estática para uso posterior.

Se quiser simplificar mais, você também não precisa de um método pra retornar a lista (getListaderegistros), já que esse método só retorna a lista. Pode deixar a listaderegistros como public static.

Ficaria mais ou menos assim:

public class CarregaRegistros {
  public static ArrayList<Registro> listaderegistros = new ArrayList<Registro>();
  
  public static void carregarDeUmArquivo(String pathcsv){
   // aqui permanece mais ou menos igual, preenchendo a variável listaderegistros ou retornando a lista carregada
  }
}

Pra usar:

CarregaRegistros.carregarDeUmArquivo('caminho/qualquer.csv');

if (CarregaRegistros.listaderegistros.size() > 0)
  Registro umRegistro = CarregaRegistros.listaderegistros.get(0);

Abraço.

@TerraSkilllAl primeiramente obrigado por ler e responder.
Na verdade eu ja tinha feito de maneira parecida como você sugeriu e a ideia de instanciar e deixar a lista preenchida na memoria pelo construtor visa performance pois essa lista tem mais de 500 mil linhas e pra fazer como voce sugere eu teria de ler a lista a cada chamada e não são poucas.
Conhece alguma maneira mais “elegante” de carregar esta lista no arranque do programa de maneira estatica diferente da que eu fiz?

Nope.

Só chamar o método “carregarDeUmArquivo” no início do programa e usar CarregaRegistros.listaderegistros quando precisar da lista, ela já vai estar preenchida.

1 curtida