Lombok | Programming Notes Programming Notes | Lombok

Lombok

Lombok is a library that automatically generates Java code to reduce boilerplate code.

Language Implementation License Current Version
Java Java MIT License 1.18.42

Table of Contents

1 Resources

2 Installation

2.1 Maven

This must be added to the dependencies in the pom.xml file:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.42</version>
    <scope>provided</scope>
</dependency>

This must be added to the plugins in the pom.xml file for Java SE 23 or higher:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <annotationProcessorPaths>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.42</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
</plugin>

2.2 Gradle

This must be added to the dependencies in the build.gradle or build.gradle.kts file:

compileOnly("org.projectlombok:lombok:1.18.42")
annotationProcessor("org.projectlombok:lombok:1.18.42")
testCompileOnly("org.projectlombok:lombok:1.18.42")
testAnnotationProcessor("org.projectlombok:lombok:1.18.42")

3 Non-Null Checks

import lombok.NonNull;

public class Foo {

    // make non-null checks on fields at runtime
    @NonNull
    public String foo;

    // make non-null checks on parameters at runtime
    public Foo(@NonNull String foo) {
        this.foo = foo;
    }

}

try {
    Foo foo = new Foo("Foo");
    System.out.println(foo.foo);
}
catch (NullPointerException e) {
    e.printStackTrace();
}

4 Getters and Setters

import lombok.Getter;
import lombok.Setter;

// generate getters and setters for specific fields
public class Foo {

    @Getter  // generate getter
    @Setter  // generate setter
    public String foo = "Foo";

}
Foo foo = new Foo();
foo.getFoo().equals("Foo");
foo.setFoo("FOO");

// generate getters and setters for all fields of classes
@Getter  // generate getters
@Setter  // generate setters
public class Bar {

    public String bar = "Bar";

}
Bar bar = new Bar();
bar.getBar().equals("Bar");
bar.setBar("BAR");

5 Object Class Methods

import lombok.EqualsAndHashCode;
import lombok.ToString;

// generate object class methods for classes
@ToString           // generate `toString` method
@EqualsAndHashCode  // generate `equals` and `hashCode` methods
public class FooBar {

    public String foo;
    public String bar;

    public FooBar(String foo, String bar) {
        this.foo = foo;
        this.bar = bar;
    }

}

FooBar foobar = new FooBar("Foo", "Bar");
foobar.toString().equals("FooBar(foo=Foo, bar=Bar)");
foobar.equals(new FooBar("Foo", "Bar")) == true;
foobar.hashCode();

6 Constructors

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;

// generate constructors for classes
@NoArgsConstructor        // generate no-arguments constructors
@RequiredArgsConstructor  // generate required-arguments constructors
@AllArgsConstructor       // generate all-arguments constructors
public class FooBar {

    public String foo;
    public final String bar;

}

FooBar foo = new FooBar();
FooBar bar = new FooBar("Bar");
FooBar foobar = new FooBar("Foo", "Bar");

7 Data Classes

import lombok.Data;

// generate getters, setters, required-args constructor and object class methods for classes
@Data
public class FooBar {

    public String foo;
    public final String bar;

}

FooBar bar = new FooBar("Bar");

foobar.toString().equals("FooBar(foo=Foo, bar=Bar)");
foobar.equals(new FooBar("Foo", "Bar")) == true;
foobar.hashCode();

foobar.getBar().equals("Bar");
foobar.setBar("BAR");