Using Advanced Features like @ExtensionMethod and @FieldDefaults in Lombok

Introduction: Lombok is a Java library that helps in reducing boilerplate code during development. It offers several annotations to automate the generation of getter/setter methods, constructors, and other common coding patterns. In addition to these basic features, Lombok also provides advanced features like @ExtensionMethod and @FieldDefaults to further simplify and enhance your code. This article will explore how these advanced features can be used to improve your coding experience with Lombok.


One of the most powerful features of Lombok is the ability to define extension methods using the @ExtensionMethod annotation. Extension methods allow you to add new methods to existing classes without modifying their source code. This feature is similar to the extension methods introduced in C#.

To use @ExtensionMethod, you first need to define a class that contains the extension method(s). Let's say we have a class called StringExtensions that contains a method toTitleCase(). To make this method available as an extension method for the String class, we can use the @ExtensionMethod annotation as follows:

public class MyClass {
    // ...

Now, any instance of the String class can invoke the toTitleCase() method as if it were a member method of the String class itself, without the need for explicit method calls on the StringExtensions class.

MyClass myInstance = new MyClass();
String sampleString = "hello, world!";
String titleCaseString = sampleString.toTitleCase(); // Invokes the extension method

By using @ExtensionMethod, you can conveniently add new functionality to existing classes, making your code more readable and modular.


The @FieldDefaults annotation is used to generate default field modifiers for all non-static fields in a class. It helps in reducing boilerplate code related to field declarations. With @FieldDefaults, you can set the default access level (private, protected, or public), final attribute, and the default values for fields.

To use @FieldDefaults, annotate the class with the desired field defaults:

@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class MyDataClass {
    String name;
    int age;
    boolean isStudent;

In the above example, all the fields in the MyDataClass are annotated with the default access level (private) and are declared as final. This eliminates the need to explicitly mention these modifiers for each field individually.

Using @FieldDefaults not only reduces boilerplate code but also improves the readability and maintainability of your code by enforcing consistent field modifiers throughout the class.


Lombok's advanced features like @ExtensionMethod and @FieldDefaults help in simplifying and enhancing your Java code. By leveraging these features, you can add new methods to existing classes seamlessly and define default field modifiers effortlessly. This improves the overall productivity of your development process and makes your code cleaner and more concise. So, go ahead and explore these advanced features of Lombok to take your Java coding experience to the next level.

noob to master © copyleft