Definir constructor predeterminado para registro

20

Tengo un registro y quiero agregarle el constructor predeterminado.

public record Record(int recordId) {
   public Record {

   }
}

Pero creó un constructor con intparam.

public final class Record extends java.lang.Record {
    private final int recordId;
    public Record(int);
    //other method
}

¿Cómo podemos agregar un constructor predeterminado a un registro?

Code_Mode
fuente
lo que definió es un constructor compacto que obtiene su declaración derivada del encabezado del registro. Hay una coincidencia 1-1 en nombre, tipo y aridad variable entre un componente de registro y el parámetro formal correspondiente en el constructor compacto, lo mismo se aplica para el constructor canónico. Un registro solo puede tener un constructor canónico. Si se declara que el constructor compacto es el constructor canónico
Vicente Romero

Respuestas:

18

Para dividir los pelos, nunca se puede definir un constructor predeterminado, porque el compilador genera un constructor predeterminado cuando no hay constructores definidos, por lo que cualquier constructor definido no es, por definición, uno predeterminado.

Si desea que un registro tenga un constructor sin argumentos, los registros permiten agregar constructores adicionales o métodos de fábrica , siempre que se llame al "constructor canónico" que toma todos los campos de registro como argumentos.

public record Record(int recordId) {
   public Record() {
      this(0); 
   }
}
ThisIsNoZaku
fuente
17

Constructor explícito

En su caso, puede especificar explícitamente un constructor sin argumentos con la delegación al constructor canónico con un valor predeterminado si lo desea y esto se puede hacer como:

public Record(){
    this(Integer.MIN_VALUE);
}

En resumen, cualquier constructor no canónico debería delegar en uno, y eso debería ser cierto para la naturaleza portadora de datos de estas representaciones.

Constructor compacto

Por otro lado, tenga en cuenta que la representación que utilizó en su código.

public Record {}

se denomina como un "constructor compacto" que representa un constructor que acepta todos los argumentos y que también puede usarse para validar los datos proporcionados como atributos del registro. Un constructor compacto es una forma alternativa de declarar el constructor canónico.

Naman
fuente