Skip to content

Nullability

pawel_labaj edited this page Aug 2, 2023 · 12 revisions

AutoRecord generates nullability checks for record components by default. This means that all record components will be considered non-null by default, and an appropriate compact constructor will be generated.

If you want to allow a recordComponent to be nullable, you can annotate the corresponding method in the interface with javax.annotation.Nullable annotation.

Example interface and generated record

Here's an example interface:

@AutoRecord
interface Person {
    String name();
    int age();
    @Nullable String email();
}

Here's the corresponding generated record that demonstrates nullability checking:

@Generated("pl.com.labaj.autorecord.AutoRecord")
@GeneratedWithAutoRecord
record PersonRecord(String name, int age, @Nullable String email) implements Person {
    PersonRecord {
        requireNonNull(name, "name must not be null");
    }
}

A compact constructor with nullability checking is generated. The email() method is annotated with Nullable annotation, hence email recordComponent could be null. The age() method returns a primitve type, so nullability check is not applied for age recordComponent