Lombok Kullanımı
Uygulama geliştirirken belki en çok sıkıldığımız fakat en çok çıktı ürettiğimiz kod parçalarının çok olduğu bazı zamanlar olabilir. Özellikle her proje başlangıcında yazılan boilerplate kodlar yazılımcıların en sıkıldığı dönem olabiliyor.
Bence asıl işi zorlaştıran ve sıkıcı olan kısım ise entitylerde ekleme çıkarma ve isim değişiklikleri. Çünkü bir özelliğin ismini değiştirdiğinizde, eski getter / setter silip yenisini oluşturmak zaman zaman sıkıcı olabilmekte. İsminde veya tipinde bir değişiklik yapmamız durumunda bu metodlarda da yapmamız gerekiyor. Özellikle entity class’ları için boilerplate koddan sıyrılmak mümkün.
Lombook, bahsettiğimiz boilerplate kodlardan kurtulmak için bazı annotation’lara sahip.
- @Getter
- @Setter
- @NonNull
- @Data
- @ToString
- @NoArgsConstructor
- @AllArgsConstructor
- @Equals
- @HashCode
- @Builder
-
Getter / Setter
Getter ve Setter metodları olmazsa olmazlarımız durumda. Peki bu annotation’ları kullanmazsak ne olur?Bu durumu bir model class’ı yazarak göstermek istedim fakat uzun bir kod bloğu olduğu için buraya yazmak yerine github üzerinden erişebilirsiniz. Bu özellikler ilk aklıma gelenler. Eminim ki çok fazla özelliğe sahip olan model class’ları görmüşsünüzdür. Tam olarak bu noktada okunabilirliği ne kadar arttırdığını rahatlıkla görebiliriz.
Peki ya boilerplate kodlar olmadan nasıl gözüküyor?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public class Employee { @Getter @Setter Long id; @Getter @Setter String name; @Getter @Setter String surname; @Getter @Setter String address; @Getter @Setter String zipcode; @Getter @Setter Boolean isMarried; @Getter @Setter String nationality; @Getter @Setter String email; @Getter @Setter String department; @Getter @Setter Integer level; @Getter @Setter Integer age; @Getter @Setter String phoneNumber; @Getter @Setter Date birthDay; @Getter @Setter Date startDay; @Getter @Setter Date endDay; @Getter @Setter String gender; @Getter @Setter BigDecimal salery; @Getter @Setter BigDecimal hourlySalary; @Getter @Setter String status; @Getter @Setter String title; @Getter @Setter String bankName; @Getter @Setter String IBAN; } |
2. NonNull
Değişkenin null olmamasını sağlar. NullPointerException hatası alırsınız.
3. Data
Class annotation’dır. getter(), setter(), equals(), canEqual(), hashCode(), toString() metodlarını ve boş constructor oluşturur.
4. ToString
Class annotation’dır. toString() metodunu override eder. Hangi alanların olmayacağını söyleyebilirsiniz.
1 2 3 4 5 |
@ToString(exclude= {"zipcode","isMarried","salery","level","age","phoneNumber","birthDay","startDay","endDay"} |
5. NoArgsConstructor
Boş bir constructor oluşturur. Parametre olarak access verebilirsiniz.
1 2 3 4 5 |
@NoArgsConstructor(access=AccessLevel.PRIVATE) |
Böylece boş constructor üzerinden nesne oluşturamazsınız.
6. AllArgsConstructor
Entity’de bulunan bütün alanlar ile bir constructor oluşturur. Parametre olarak access verebilirsiniz.
1 2 3 4 5 |
@AllArgsConstructor(access=AccessLevel.PUBLIC) |
7. Equals & HashCode
equals() ve hashCode() metodlarını oluşturur.
8. Builder
Lombok ile builder design pattern’ı da kullanabilirsiniz. Aşağıdaki implementation yerine @Builder annotation’ı kullanılabilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
public class Department { @Getter @Setter private Long id; @Getter @Setter private String departmentName; public Department(Long id, String departmentName) { this.id = id; this.departmentName = departmentName; } public static DepartmentBuilder builder() { return new DepartmentBuilder(); } public static class DepartmentBuilder { private Long id; private String departmentName; public DepartmentBuilder id(Long id) { this.id = id; return this; } public DepartmentBuilder departmentName(String departmentName) { this.departmentName = departmentName; return this; } public Department build() { return new Department(id, departmentName); } } } |
Lombok kullanılan class’a buradan, kullanılmayan class’a buradan ulaşıp karar verebilirsiniz.
Projeye Github üzerinden ulaşabilirsiniz.
Kaynak;