Início‎ > ‎

Não depender da inicialização dos objetos

Existem diversas maneiras de instanciar um objeto em Java sem que um de seus construtores seja executado. Estes objetos não são seguros pois seu estado pode estar inconsistente ou em desacordo com o invariante da classe (ver item “Usar classes não desserializáveis”). É necessário garantir que os objetos usados na aplicação estejam corretamente inicializados.

Para garantir que um objeto tenha sido inicializado antes de usá-lo:

  1. Torne todas as variáveis private, conforme o item “Limitar acesso às variáveis, classes e métodos”.
  2. Declare os métodos de acesso às variáveis final, de acordo com as instruções do item “Tornar todos os métodos e classes “final””.
  3. Adicione uma variável booleana privada (private boolean) initialized em sua classe.
  4. Adapte todos os construtores para que atribuam o valor true à variável initialized como a última ação antes de retornarem.
  5. Faça com que todos os métodos (exceto os construtores) verifiquem a variável initialized antes de executar. Caso a variável esteja com o valor false, o método deve terminar com uma exceção. Métodos usados pelos construtores não podem fazer esta verificação e devem ser declarados privados (private).

A classe abaixo é um exemplo da utilização destas regras:

public class MyClass{
  private boolean initialized = false;
  //outras variáveis

  public MyClass (){
    //inicialização das variáveis
    method1();
    initialized = true;
  }

  private void method1(){
    //não verifica initialized
    //código do método
  }

  public void method2() throws Exception {
    if (initialized == false) throw new Exception(“Objeto não foi inicializado”);
    //código do método
  }
}

Comments