Can Java Records Replace Lombok? A Practical Comparison
This article compares Java's native record feature with the Lombok library, showing how records can reduce boilerplate code, outlining scenarios where records can replace Lombok, and discussing the limitations of each approach for clean and maintainable backend development.
In the ongoing Java new‑features series we previously introduced the record keyword; now we compare record with Lombok and discuss when a record can replace Lombok.
Lombok's Power
Lombok is popular because it makes code much cleaner. Without Lombok, a simple User class requires many fields, constructors, getters, setters, equals, hashCode and toString methods.
public class User {
private String username;
private String email;
private int userId;
public User(String username, String email, int userId) {
this.username = username;
this.email = email;
this.userId = userId;
}
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public int getUserId() { return userId; }
public void setUserId(int userId) { this.userId = userId; }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
if (userId != user.userId) return false;
if (username != null ? !username.equals(user.username) : user.username != null) return false;
return email != null ? email.equals(user.email) : user.email == null;
}
@Override
public int hashCode() {
int result = username != null ? username.hashCode() : 0;
result = 31 * result + (email != null ? email.hashCode() : 0);
result = 31 * result + userId;
return result;
}
@Override
public String toString() {
return "User{" + "username='" + username + '\'' + ", email='" + email + '\'' + ", userId=" + userId + '}';
}
}With Lombok, the same class can be reduced to just a few lines using the @Data annotation.
@Data
public class User {
private String username;
private String email;
private int userId;
}The @Data annotation includes @Getter , @Setter , @EqualsAndHashCode and @ToString , so a single annotation generates all boilerplate methods, dramatically reducing code size.
Lombok's Problems
Despite its convenience, Lombok has drawbacks:
It is a third‑party dependency maintained by the community; newer Java versions may cause compatibility issues and unexpected errors.
IDE support is not universal, and some IDEs may exhibit strange behavior when Lombok is used.
Using record to Replace Lombok
The record class introduced in Java 16 automatically generates a constructor, equals(), hashCode() and toString() based on its fields, similar to Lombok's @Data.
public record UserRecord(String username, String email, int userId) {}This single line produces a much cleaner definition without any third‑party library.
UserRecord userRecord = new UserRecord("didi", "[email protected]", 35);
System.out.println(userRecord.email());
System.out.println(userRecord.toString());Note that record generates accessor methods named after the fields (e.g., email()) instead of traditional getEmail() getters.
Which Situations Cannot Be Replaced?
While powerful, record cannot fully replace Lombok for all use cases:
Fields in a record are implicitly final; they cannot be modified after construction. record classes are final and cannot be subclassed, limiting extensibility.
Therefore, record is best suited for immutable data carriers, whereas Lombok remains useful for mutable objects and more complex boilerplate generation.
Summary
Both Lombok and record help write cleaner Java code. Lombok, as a third‑party library, offers broader capabilities but may introduce compatibility and IDE issues. record is a native Java feature, more limited but requires no extra dependencies and enjoys better IDE support.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Programmer DD
A tinkering programmer and author of "Spring Cloud Microservices in Action"
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
