Decide para este desafio usar o que havia aprendido anteriormente sobre a questão do tipo especial do java record, com isso eu criar duas classes diferentes com os mesmos métodos e atributos, mas com a diferença que uma usava o lombok para criação de métodos por meio da anotação e já a outra usando do record que faz tudo automaticamente para você.
Tabela da feats de cada Class
Feature | Pessoa (Class) | People (Record) |
---|---|---|
Mutability | Mutable (has setters) | Immutable (no setters) |
Boilerplate | Uses Lombok for constructors, getters, and setters | No need for Lombok, auto-generated |
Extends Ser | Yes | No |
Usage | Flexible, can be modified | Best for immutable data storage |
Class Pessoa(Lombok)
package com.rickmviana.github.entity;
@lombok.AllArgsConstructor // Generates a constructor with all attributes
@lombok.NoArgsConstructor // Generates a default (empty) constructor
@lombok.Getter // Generates getter methods for all fields
@lombok.Setter // Generates setter methods for all fields
public class Pessoa extends Ser { // Pessoa (Person) extends Ser (Being)
private String name; // Person's name
private int age; // Person's age
@Override
public String toString() {
return "Your name is " + this.getName() + " and age is " + this.getAge();
}
}
package com.rickmviana.github.entity;
public abstract class Ser { // Abstract class representing a "Being"
public abstract String toString(); // Abstract method to be implemented by subclasses
}
Class People(Record)
package com.rickmviana.github.entity;
public record People(
String name,
int age
) {
@Override
public String toString() {
return "Your name is " + this.name() + " and age is " + this.age();
}
}
Class Main
package com.rickmviana.github;
import com.rickmviana.github.entity.People;
import com.rickmviana.github.entity.Pessoa;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Pessoa> pessoas = new ArrayList<>(); // List to store Pessoa objects
List<People> peoples = new ArrayList<>(); // List to store People objects (record)
// Adding Pessoa instances to the list
pessoas.add(new Pessoa("Lucas", 21));
pessoas.add(new Pessoa("Maria", 22));
// Adding People instances to the list
peoples.add(new People("Jozef", 23));
peoples.add(new People("Ricardo", 24));
// Printing People list size and first element
System.out.printf("People List size: %d%n", peoples.size());
System.out.println("Nome: " + peoples.getFirst().name() + " - Idade: " + peoples.getFirst().age() + "\n");
peoples.forEach(System.out::println); // Printing all elements in the People list
System.out.println();
// Printing Pessoa list size and first element
System.out.printf("Pessoa List Size: %d%n", pessoas.size());
System.out.println("Nome: " + pessoas.getFirst().getName() + " - Idade: " + pessoas.getFirst().getAge() + "\n");
pessoas.forEach(System.out::println); // Printing all elements in the Pessoa list
}
}