Construtor canônico compacto
Valide e normalize campos de records sem repetir a lista de parâmetros.
Comparação de Código
✕ Java 16
public record Person(String name,
List<String> pets) {
// Full canonical constructor
public Person(String name,
List<String> pets) {
Objects.requireNonNull(name);
this.name = name;
this.pets = List.copyOf(pets);
}
}
✓ Java 16+
public record Person(String name,
List<String> pets) {
// Compact constructor
public Person {
Objects.requireNonNull(name);
pets = List.copyOf(pets);
}
}
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Menos repetição
Não é necessário repetir a lista de parâmetros nem atribuir cada campo manualmente.
Validação
Perfeito para verificações de nulo, validação de faixa e cópias defensivas.
Intenção mais clara
A sintaxe compacta enfatiza a validação, não o boilerplate.
Abordagem Antiga
Validação explícita no construtor
Abordagem Moderna
Construtor compacto
Desde o JDK
16
Dificuldade
Intermediário
Suporte JDK
Construtor canônico compacto
Disponível
Amplamente disponível desde o JDK 16 (março de 2021)
Como funciona
Records podem declarar um construtor canônico compacto que omite a lista de parâmetros e as atribuições de campos. O compilador atribui automaticamente os parâmetros aos campos após a execução da lógica de validação. Ideal para verificações de pré-condições, cópias defensivas e normalização.
Documentação Relacionada