the complete details of what Lombok's @Builder annotation generates for the CourseNameRating class:
Generated Builder Class (by Lombok):
// This entire class is generated by Lombok at compile time
public static class CourseNameRatingBuilder {// Private fields to store values during buildingprivate String name;private int rating;// Default constructorCourseNameRatingBuilder() {}// Setter method for name (returns builder for chaining)public CourseNameRatingBuilder name(String name) {this.name = name;return this; // Returns 'this' for method chaining}// Setter method for rating (returns builder for chaining) public CourseNameRatingBuilder rating(int rating) {this.rating = rating;return this; // Returns 'this' for method chaining}// Build method - creates the final objectpublic CourseNameRating build() {return new CourseNameRating(this.name, this.rating);}// toString method for debuggingpublic String toString() {return "CourseNameRating.CourseNameRatingBuilder(name=" + this.name + ", rating=" + this.rating + ")";}
}// Static factory method (also generated by Lombok)
public static CourseNameRatingBuilder builder() {return new CourseNameRatingBuilder();
}
How it works step by step:
1. CourseNameRating.builder()
- Calls the static factory method
- Creates and returns a new CourseNameRatingBuilder instance
2. .name(course.getName()) - Calls CourseNameRatingBuilder.name(String name)
- Sets this.name = "Spring Boot" (example)
- Returns the same builder instance
3. .rating(course.getRating()) - Calls CourseNameRatingBuilder.rating(int rating)
- Sets this.rating = 4 (example)
- Returns the same builder instance
4. .build() - Calls CourseNameRatingBuilder.build()
- Creates new CourseNameRating("Spring Boot", 4)
- Returns the completed CourseNameRating object
Key Features:
- Method chaining: Each setter returns this
- Immutable result: Final object can't be changed after creation
- Type safety: Compile-time checking of required fields
- Clean API: Fluent, readable object construction