Translate

viernes, 19 de junio de 2026

Java 26: LazyConstant


Una de las novedades de Java 26 es LazyConstant, una API experimental que permite definir constantes inicializadas bajo demanda (*lazy initialization*) de forma segura y eficiente.


Supongamos que tenemos un objeto costoso de crear:


public class Config {

    private static final ExpensiveObject INSTANCE =

            new ExpensiveObject();

}


El objeto se crea cuando la clase es cargada, aunque nunca llegue a utilizarse.

Una solución clásica es utilizar el patrón Initialization-on-demand holder:


public class Config {


    private static class Holder {

        static final ExpensiveObject INSTANCE =

                new ExpensiveObject();

    }


    public static ExpensiveObject instance() {

        return Holder.INSTANCE;

    }

}


Funciona, pero es un patrón poco evidente y algo verboso.

Con Java 26 podemos declarar un valor que será calculado únicamente la primera vez que se necesite:


private static final LazyConstant<ExpensiveObject> INSTANCE =

        LazyConstant.of(ExpensiveObject::new);


y obtenerlo mediante:


ExpensiveObject obj = INSTANCE.get();


La instancia se crea una sola vez y es segura para múltiples hilos.


Veamos un ejemplo:


class DatabaseConnection {


    private static final LazyConstant<ConnectionPool> POOL =

            LazyConstant.of(ConnectionPool::new);


    static ConnectionPool pool() {

        return POOL.get();

    }

}


La conexión se abrirá únicamente cuando alguien invoque:


DatabaseConnection.pool();


¿Qué ventajas tiene?

  • Inicialización diferida (lazy initialization).
  • Thread-safe.
  • Evita implementar patrones complejos.
  • Más legible que usar synchronized, volatile o double-checked locking.
  • Puede reemplazar muchos usos de AtomicReference.


LazyConstant está pensado para recursos costosos o poco utilizados, donde tiene sentido retrasar su creación.

Durante años, Java obligó a utilizar patrones como el Holder idiom o double-checked locking para conseguir inicialización perezosa segura. Java 26 introduce LazyConstant para convertir ese patrón en una característica del lenguaje y la biblioteca estándar, haciendo el código más simple, legible y menos propenso a errores.


No hay comentarios.:

Publicar un comentario