What are Java Records and How to Use them Alongside Constructors and Methods?


Introduction

Java continually evolves to meet modern programming needs, and one of its newest features, Java Records, introduced in JDK 16, simplifies the task of modeling data. This article sheds light on Java Records, detailing how they work alongside constructors and methods to streamline your Java coding experience

Understanding Java Records

Java Records are a type of class that aims to simplify the representation of "plain data" in your applications. Essentially, they are immutable data carriers used to encapsulate a few final fields, termed 'components', along with methods to access them

Before Records, developers had to write a substantial amount of boilerplate code for simple data carrier classes, including constructors, getters, equals(), hashCode(), and toString() methods. Java Records eliminate the need for this redundancy, leading to cleaner and more readable code.

Declaring a Record

A Java Record is declared similarly to a class, using the record keyword. Here is an example −

Vpublic record User(String name, int age) {}

In the above declaration, User is the Record, and name and age are the components. By default, a Record generates a public constructor, public read accessor methods (similar to getters), and the equals(), hashCode(), and toString() methods.

Java Records and Constructors

While Records automatically provide a public constructor, you can declare an explicit constructor if you want to add validation or normalization logic to the components. The explicit constructor must have the same parameters as the record components. Here's an example −

public record User(String name, int age) {
   public User {
      if (age < 0) {
         throw new IllegalArgumentException("Age cannot be negative");
      }
      if (name == null || name.isBlank()) {
         throw new IllegalArgumentException("Name cannot be blank");
      }
   }
}   

In this example, the constructor checks whether age is negative and name is blank, throwing an exception if either condition is met

Java Records and Methods

Just like a regular class, a Record can contain additional methods. However, keep in mind that a Record's primary goal is to carry data, so it's recommended to limit the number of additional methods. Here's how you can add methods to a Record:

public record User(String name, int age) {
   public boolean isAdult() {
      return age >= 18;
   }
}

In the above code, we added the isAdult() method to the User Record, which checks if the user is an adult based on the age component.

Limitations of Java Records

While Records have their advantages, they also come with certain limitations −

  • Records are implicitly final, and hence cannot be extended

  • Records cannot have non-final fields.

  • Each component of a Record must be unambiguously derivable from the state provided in the constructor parameters.

  • Records are intended to be simple data carriers, so they shouldn't be overly complex or have many methods.

Conclusion

Java Records are a powerful tool for creating simple, immutable data carrier classes, reducing boilerplate code and improving code readability. They seamlessly work alongside constructors and methods to provide a simplified programming model. As you continue your journey with Java, embracing and leveraging the power of Records will undoubtedly prove beneficial

Updated on: 19-Jul-2023

114 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements