Java 14

Paylaş

Java 14 ile birlikte gelen Record, Pattern Matching ve diğer bazı özellikler ile ilgili bilgiler ve kullanımı yer alıyor.

Pattern Matching for instanceof (Preview) – JEP 305

Veri tipi belirsiz bir nesneyi kullanmak için öncelikle instanceof anahtar kelimesi ile kontrol edilir ve cast işlemi yapılır.

public class App {

    public static void main(String[] args) {

        Object myName = "Yusuf Sezer";
        if (myName instanceof String) {
            String myNameStr = (String) myName;
            System.out.println(myNameStr);
        }

    }
}

Bu işlem Pattern Matching özelliği ile cast işlemine gerek kalmadan aşağıdaki gibi kullanma imkanı gelmiştir.

public class App {

    public static void main(String[] args) {

        Object myName = "Yusuf Sezer";
        if (myName instanceof String myNameStr) {
            System.out.println(myNameStr);
        }

    }
}

Özellik && operatörü ile birlikte kullanılabilmektedir.

public class App {

    public static void main(String[] args) {

        Object myName = "Yusuf Sezer";
        if (myName instanceof String myNameStr && myNameStr.length() > 10) {
            System.out.println(myNameStr);
        }

    }
}

Records (Preview) – JEP 359

Veriler üzerinde işlem yaparken verileri ifade etmek için POJO sınıfları kullanılır.

POJO sınıflarına özellik ve özelliklere ait getter-setter metotların yazımı aynıdır ve yazımı zaman almaktadır.

İşlemi zamanını kısaltmak için IDE özelliği veya Lombok kütüphanesi sıklıkla kullanılmaktadır.

Java 14 ile birlikte gelen Record özelliği POJO sınıflarının oluşturulmasını ek kütüphaneye ihtiyaç duymadan hızlıca yapmayı sağlar.

public class Person {

    private String firstName;
    private String lastName;
    private Integer age;

    // constructor-getter-setter-equals-hasCode-toString
}

Yukarıda yer alan sınıfı Java 14 ile gelen record ile yazımı aşağıdaki gibidir.

record Person(String firstName, String lastName, Integer age) {}

Özelliğin kullanımı sıradan sınıf kullanımı gibidir.

public class App {

    public static void main(String[] args) {

        Person yusuf = new Person("Yusuf", "Sezer", Integer.MAX_VALUE);
        System.out.println(yusuf);
        System.out.println(yusuf.firstName());
        System.out.println(yusuf.lastName());
        System.out.println(yusuf.age());

    }
    
    record Person(String firstName, String lastName, Integer age) {}
    
}

Record ile oluşturulan sınıfa static özellik ve metot eklenebilir.

record Person(String firstName, String lastName, Integer age) {

    private static String webSite = "yusufsezer.com.tr";

    public String fullName() {
        return firstName + " " + lastName;
    }

}

Record özelliği syntactical sugar yani sınıf yazımını kısaltmak için derleme öncesi derleyici tarafından düzenlenen bir işlemdir.

Proje derlenip javap aracı ile .class dosyaları incelendiğinde aşağıdaki gibi bir sonuç verecektir.

final class com.yusufsezer.App$Person extends java.lang.Record {
  public com.yusufsezer.App$Person(java.lang.String, java.lang.String, java.lang.Integer);
  public java.lang.String fullName();
  public java.lang.String toString();
  public final int hashCode();
  public final boolean equals(java.lang.Object);
  public java.lang.String firstName();
  public java.lang.String lastName();
  public java.lang.Integer age();
  static {};
}

Class

Records özelliği ile ilgili bilgi almak için Class sınıfına isRecord, getRecordComponents metotları eklenmiştir.

public class App {

    public static void main(String[] args) {

        System.out.println(Person.class.isRecord());
        Arrays
                .stream(Person.class.getRecordComponents())
                .forEach(System.out::println);

    }

    record Person(String firstName, String lastName, Integer age) {}

}

Helpful NullPointerExceptions – JEP 358

Java içerisinde nesnelerin herhangi bir bellek alanını işaret etmemesi null ile ifade edilir.

public class App {

    public static void main(String[] args) {
        System.out.println(String.valueOf(null));
    }

}

Bellek alanını işaret etmeyen ifade kullanılmak istediğinde NullPointerException ile karşılaşılır.

Exception in thread "main" java.lang.NullPointerException

Hangi değerin null olduğu ile ilgili detaylı bilgi almak için ShowCodeDetailsInExceptionMessages parametresi gelmiştir.

-XX:+ShowCodeDetailsInExceptionMessages

Java komutlarını parametre ile çalıştırıldığında hangi ifadenin null olduğu ile ilgili detaylı açıklama verecektir.

Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "value" is null

Özellik NullPointerException ile karşılaşılan hataların belirlenmesin faydalı olacaktır.

Switch Expressions (Standard) – JEP 361

Java 12 ve Java 13 sürümlerinde deneysel olarak kullanılabilen Switch ifadesi Java 14 ile birlikte standart olmuştur.

Diğer

Java 14 ile birlikte gelen en önemli özellik Record ile POJO sınıflarının daha kısa yazılması sağlanmıştır.

Önceki Java sürümlerinde olduğu gibi bulut tabanlı uygulamalarda performansı arttırmak amacıyla çöp toplayıcı ve bellek yönetiminde değişiklikler olmuştur.

Java Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.


Bunlarda ilgini çekebilir