Private Constructor

  • March, 03 2022
  • Jorge Aguilera
  • 01:00
  • java

En el post anterior vimos cómo usar Factorias y las ventajas que estas pueden aportar sobre los constructores mientras que en el segundo post veíamos cómo usar el patrón Builder a la hora de construir objetos

En este post (corto) vamos a ver las ventajas que tiene y cuándo aplicar un constructor privado.

"Enforce noninstantiability with a private constructor"

Muchas veces nos encontramos con la típica clase Util que lo único que contiene son un buen puñado de funciones y campos privados, "atentando" contra todo diseño orientado a objetos. Sin entrar en tantas exquisitices estas clases sí son útiles cuando consiguen agrupar un número de funciones comunes (el caso más común podría ser la clase java.util.Math)

La característica principal de estas clases es el que no tienen por objetivo ser instanciable. No tienen sentido como objetos tal cual y lo que pretendemos es usar los métodos static directamente. Sin embargo, si una clase no tiene un constructor Java crea uno por defecto sin parámetro y público con lo que cualquiera que vaya a usar esta clase puede estar tentado a instanciar uno objeto de esta clase.

En muchos casos, para evitar esto, se define la clase como abstract para evitar su instanciación pero el problema es que se podría crear una clase que la heredera y esta ofrecer el constructor.

Por eso, cuando lo que queremos es tener una clase Util es aconsejable añadirle un constructor sin parámetros con visibiilidad private

public class CalculosHacienda{

    private CalculosHacienda(){
        throw new AssertionError(); // no es necesario pero así reforzamos que no se puede crear el objeto
    }
}

Como bola extra, el crear el método privado hace que la clase no pueda ser extendidas por otras pues el constructor que estas implementaran NO podría llamar al de la clase padre al ser private

Follow comments at Telegram group Or subscribe to the Channel Telegram channel

2019 - 2022 | Mixed with Bootstrap | Baked with JBake v2.6.7