A record class is a restricted form of classes that models data as data. Thus, also can be thought as data only class. Additionally, this type of class is immutable.
It automatically implements the following methods:
- public boolean equals...
- public int hashCode...
- public String toString() {...}
The class generated by the record is a final class.
The constructor will also be handled and the parameters is matching the arrangement of the record parameter(s).
Use Cases
- Data Transfer Objects (DTO) (i.e. not applicable to JPA entities)
- Compound map keys
- Multiple return values
Syntax
record <IDENTIFIER>([[[<FIELD_TYPE_1> <FIELD_NAME_1>][, <FIELD_TYPE_2> <FIELD_NAME_2>]][,... <FIELD_TYPE_2> <FIELD_NAME_N>]]) {}
Token | Description |
---|---|
IDENTIFIER | A valid Java identifier. |
FIELD_TYPE_1 FIELD_TYPE_2 FIELD_TYPE_N |
The type of the field(s) in the record parameter(s). |
FIELD_NAME_1 FIELD_NAME_2 FIELD_NAME_N |
The name of the field(s) in the record parameter(s). |
The identifier has an equivalent cannonical constructor with parameters equivalent to its parameters.
Each fields has the following:
- private final field of the same name.
- public accessor method of the same name and type.
Example
record Person(String firstName, String lastName) {}
The above example is equivalent to the following class definition:
public final class PersonC {
private final String firstName;
private final String lastName;
public PersonC(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String firstName() {
return this.firstName;
}
public String lastName() {
return this.lastName;
}
public boolean equals...
public int hasCode...
public String toString() {...}
}
Compact Constructor
In the record definition we can use a compact constructor. This constructor is the shorthand form of the generated default constructor. All of the fields indicated on the record parameters are implicitly available in it.
Syntax of the Compact Constructor
pubic <IDENTIFIER> {
// Initilization logic.
}
The IDENTIFIER here is matching the record IDENTIFIER, just like when you are writing a constructor of a class but without parameters even the parentheses.
Example Usage
record Person(String firstName, String lastName) {
public Person {
java.util.Objects.requireNonNull(firstName);
java.util.Objects.requireNonNull(lastName);
}
}
Recent Comments