İlk bakışta Java 14

Oracle, java’nın en güncel versiyonu olan java 14’ü geçtiğimiz saatlerde duyurdu. Birçok farklı yenilik var ancak benim ilk olarak bahsetmek istediğim konu, java programcılarının genellikle şikayet ettikleri gereksiz kod yazmayı azaltacak bir özellik olan records.

Records, bizim daha önceden IDE veya 3rd party tool’lar ile yapabildiğimiz; data tipi yazmayı kolaylaştıran bir keyword aslında. Eski versiyonlarda immutable bir data tipi oluşturmak istediğimizde, field’ları final keyword’ü ile, class’ı private constructor ile vs. immutable olacak şekilde belirtmemiz gerekiyordu. Ancak records ile bunları manuel yazmamıza gerek kalmıyor. Ayrıca ilgili data tip’ini etkin ve doğru şekilde kullanabilmek için override etmemiz gereken equals, hashCode ve toString metodlarını da default olarak class’a ekliyor.

Java diğer programlama dillerinde hali hazırda bulunan bazı özellikleri dile eklemekte çoğu zaman gecikiyor gibi bir düşünce var ve bence de pek yanlış sayılmaz.

Şimdi bu özelliği daha iyi anlayabilmek ve biraz inceleyebilmek için bir örnek yapalım.

Java 14 öncesinde immutable bir data objesi için yazmamız gerekenler aşağı yukarı şöyle bir şeyler olacaktı;

Şimdi aynı class’ı bir de java 14 ile yapmaya çalışalım.

Records özelliği java 14 versiyonunda preview olduğu için default olarak disabled geliyor. Aktif hale getirip deneyebilmek için --enable-preview parametresini kullanmamız gerekli.

Simple class’ı javac --enable-preview --release 14 SimplePojo.java komutu ile derliyoruz. Derlenen class’a javap komutu ile bakabiliriz; javap, class dosyalarının içeriklerine ve özelliklerine bakabilmemizi sağlayan bir araç. Daha fazla bilgi için buraya bakabilirsiniz.

javap SimplePojo.class

Çıktı şu şekilde;

final class com.yfklon.SimplePojo extends java.lang.Record {
  public com.yfklon.SimplePojo(java.lang.String, java.lang.String);
  public java.lang.String toString();
  public final int hashCode();
  public final boolean equals(java.lang.Object);
  public java.lang.String name();
  public java.lang.String surname();
}

Record, tüm record objelerinin extend ettiği bir abstract class ve içerisinde sadece equals, hashCode ve toString abstract metot imzaları bulunuyor. Bu metotların nasıl implemente edildiği JEP-359‘da şöyle belirtilmiş;

Implementations of equals and hashCode that say two records are equal if they are of the same type and contain the same state; and An implementation of toString that includes the string representation of all the record components, with their names.

Immutable bir data tip’i oluşturmak java ile daha önce hiç bu kadar kolay olmamıştı diyerek yazıyı sonlandırmak isterdim ancak uzun bir süredir bu işlemler için lombok kullanılan bir kütüphane zaten 🙂 Yine de java’nın içerisinde data tip’lerini okunabilir şekilde kullanabilmek için güzel bir geliştirme olmuş diye düşünüyorum.

Detailed Message in NullPointerExceptions

Dikkatimi çeken bir diğer özellik daha detaylı null pointer exception açıklaması sağlayan bir seçenek. Aşağıdaki seçenek ile hangi değerin null olduğunu artık görebiliyoruz.

-XX:+ShowCodeDetailsInExceptionMessages

Ayrıntılar için bu sayfaya bakabilirsiniz.

Görüşmek üzere.

Referanslar:

Published by

Yusuf Kemal

Software Engineer

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s