Java 14 sonrası gelen Record’un ne olduğundan ve nasıl kullanılacığından bahsedeceğim.
Nedir?
Kısaca özetlemek gerekirse DTO yaratmanın basit, kullanışlı ve yeni bir yoludur. Bu yenilik ile birlikte oluşturacağımız DTO’yu bir class değil record olarak oluşturup, alanlarımızı ise metot parametresi olarak tanımlıyoruz.
Record kullanarak DTO’larımızı hızlı oluşturup, kullanabiliyoruz. Record kullanarak getter, hashCode, equals metotları tanımlı olarak da gelmektedir.
Kullanımı
İlk önce klasik olarak bir class oluşturalım. Student sınıfında alanlarımız olacak.
public class Student{
private long id;
private String name;
private String surName;
//Constructor
//Getter
//Setter
}
Code language: PHP (php)
Yukarıda yazmadığım alanları da yazmak zorunda kalıyoruz. (Lombok var, evet 😊)
Bu yapının aynısını Record kullanarak yapalım.
public record Student(long id,String name,String surName){}
Code language: JavaScript (javascript)
Örnekte gördüğünüz üzere bu kadar. İki yaklaşım da aynı işi yapmakta ve sonraki kullanımlarımızda bir farklılık katmamakta.
public record Student(long id,String name,String surName){
public Student {
this.id=id+2l;
}
}
Code language: JavaScript (javascript)
Yukarıdaki örnekte olduğu gibi constructor yapabiliriz yada instance metot ya da static metotlar oluşturmamıza engel değil.
public class RecordsExample {
public static void main(String[] args) {
Student student = new Student(1l, "Burak", "Kutbay");
System.out.println( student.toString() );
}
}
Code language: JavaScript (javascript)
Records kullanımına baktık ayrıca record reflectionları bulunmakta. Bunlardan bilmemiz gereken componenttir. Component kullanarak record sınıfına ait alanları görebiliyoruz.
var components = student.getClass.getRecordComponents();
for (RecordComponent recordComponent : components ){
System.out.println(recordComponent)
}
Code language: JavaScript (javascript)
Çıktımıza bakalım
java.lang.Long id
java.lang.String name
java.lang.String surName
Code language: CSS (css)
Güzel kodlamalar
“Record kullanarak DTO’larımızı hızlı oluşturup, kullanabiliyoruz. Record kullanarak getter, setter, hashCode, equals metotları tanımlı olarak da gelmektedir.” cümlenizi düzeltmek isterim.
record’lar immutability sağladığı için setter metotları içermezler.
Geri bildirimin icin tesekkurler. Gerekli duzeltmeyi yaptim.