Skip to content
pawel_labaj edited this page Aug 3, 2023 · 17 revisions

AutoRecord - Java record source generator

What is AutoRecord

AutoRecord is a code generator that helps you easily generate Java records. It provides an easy way to avoid writing repetitive boilerplate code. It generates the code with features such as:

AutoRecord allows users to customize record generation process by:

Why AutoRecord was created

Google AutoValue has long been used as a way to work with Value Classes in an easy way. However, when Java records were introduced, they lacked some features that AutoValue had, such as nullability checking, builders, and memoization. This is why AutoRecord was created.

How to use AutoRecord

Create your value class as an interface, with an accessor method for each desired property, and annotate it with @AutoRecord annotation:

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

AutoRecord will then generate a Java record that implements your interface. The constructor parameters correspond, in order, to the interface methods:

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

You can create the record instance with canonical constructor then:

PersonRecord person = new PersonRecord("Joe", 25);

It is recommended to provide a factory method in your interface to make it easier to create instances of your record. This method should have a clear and descriptive name and take all required parameters for creating an instance of the record. Here is an example of what this might look like:

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

    static Person create(String name, int age) {
        return new PersonRecord(name, age);
    }
}
📝 Note
Here you can see example of generated record with all features provided by the library: Full.java

Getting started

Maven

Add the following dependency to your pom.xml file:

<dependency>
    <groupId>pl.com.labaj.autorecord</groupId>
    <artifactId>auto-record</artifactId>
    <version>${auto-record.version}</version>
    <scope>provided</scope>
</dependency>

Gradle

Declare the following dependency in your build.gradle script:

dependencies {
    annotationProcessor 'pl.com.labaj.autorecord:auto-record:${autoRecordVersion}'
}

IDE

Depending on your IDE you are likely to need to enable Annotation Processing in your IDE settings.