Definir construtor padrão para registro

20

Eu tenho um registro e quero adicionar o construtor padrão a ele.

public record Record(int recordId) {
   public Record {

   }
}

Mas criou o construtor com intparam.

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

Como podemos adicionar um construtor padrão a um registro?

Code_Mode
fonte
o que você definiu é um construtor compacto que obtém sua declaração derivada do cabeçalho do registro. Há uma correspondência de 1 a 1 em nome, tipo e variável variável entre um componente de registro e o parâmetro formal correspondente no construtor compacto, o mesmo se aplica ao construtor canônico. Um registro pode ter apenas um construtor canônico. Se declarado o construtor compacto é o construtor canônico
Vicente Romero

Respostas:

18

Para dividir cabelos, você nunca pode definir um construtor padrão, porque um construtor padrão é gerado pelo compilador quando não há construtores definidos; portanto, qualquer construtor definido é, por definição, não um padrão.

Se você deseja que um registro tenha um construtor sem argumento, os registros permitem adicionar construtores extras ou métodos de fábrica , desde que o "construtor canônico" que utilize todos os campos de registro como argumentos seja chamado.

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

Construtor explícito

No seu caso, você pode especificar explicitamente um construtor sem argumento com a delegação para o construtor canônico com um valor padrão, se desejar, e isso pode ser feito como -

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

Em resumo, qualquer construtor não canônico deve delegar para um, e isso deve ser verdadeiro para a natureza de transporte de dados dessas representações.

Construtor compacto

Por outro lado, observe que a representação que você usou no seu código.

public Record {}

é denominado como um "construtor compacto", que representa um construtor que aceita todos os argumentos e que também pode ser usado para validar os dados fornecidos como atributos do registro. Um construtor compacto é uma maneira alternativa de declarar o construtor canônico.

Naman
fonte