Java 21 – Record Patterns Nedir? (JEP 440)
Merhaba, bu yazıda Java 21 ile gelen Record Pattern ile gelen yeni ozellikler nedir ve nasıl kullanılacağından ve ne gibi avantajları olduğundan bahsedeceğim.
Java Record Nedir?
Java 14 sonrası gelen Record’un ne olduğu hakkında bilgi almak istiyorsanız aşağıdaki bağlantidan bilgi alabilirsiniz.
İlgini Çekebilir: Java Record Nedir?
Pattern matching instanceof
Bir nesnenin tip karsılaştırmasını yapmak için ve değerlerini alabilmek icin Java 16’dan itibaren aşagıdaki gibi kullanılabiliyorduk.
record Calculate(int x, int y) {}
static void printSum(Object obj) {
if (obj instanceof Calculate c) {
int x = c.x();
int y = c.y();
System.out.println(x+y);
}
}
Code language: Java (java)
Nesnemizin alanlarına erişmek içinde çağırmamız gerekmekteydi Java 21 ile artık bu yapıyı aşağıdaki gibi kullanabiliyor olacağız.
record Calculate(int x, int y) {}
static void printSum(Object obj) {
if (obj instanceof Calculate(int x, int y)) {
System.out.println(x+y);
}
}
Code language: Java (java)
Yukarıdaki gibi bir tanımlama yapabilmekteyiz. Yeni gelen bu özellik sayesinde nesnemizin alanlarını da taşımız oluyoruz.
Nested Record Patterns
İç içe Record kullanılabilmesine olanak sağlamaktadır. Bu özellik sayesinde oluşturduğumuz record nesnesinin alanlarını almak için kullanılan Record patternleri iç içe yani nested olarak kullanmabilmemize olanak sağlamaktadır.
Örnek olarak
record Point(int x, int y) {}
enum Color { RED, GREEN, BLUE }
record ColoredPoint(Point p, Color c) {}
Code language: Java (java)
Record nesnelerimizin içerisindeki bir değerleri nested olarak record pattern kullanarak Record nesnesinin renk değerine de erişebiliriz.
static void printColorOfUpperLeftPoint(Rectangle r) {
if (r instanceof Rectangle(ColoredPoint(Point p, Color c),
ColoredPoint lr)) {
System.out.println(c);
}
}
Code language: Java (java)
Record kullanmadan bu yapıyı kullanmak isteseydik
Rectangle r = new Rectangle(new ColoredPoint(new Point(x1, y1), c1),
new ColoredPoint(new Point(x2, y2), c2));
Code language: JavaScript (javascript)
Şeklinde bir yapı tamamlamamız gerekmekteydi.
Recordları nested olarak kullandığımız takdirde kendisi de bir Recordtur. Record sınıflarını bu şekilde genişletebilmekteyiz.
No Comment! Be the first one.