Java 8 ve Java 17 Versiyonlarının Arasındaki Farklar Nediir?

 

Giriş

Yeni bir Java versiyonu 2 yılda bir yayınlanır. Yeni versiyon, öncekinden ufak tefek diyebileceğimiz farklılıklara sahip olur. Java 17 versiyonu için de bu durum aynen geçerlidir.

Dünyada hala en çok kullanılan versiyon olan Java 8, yakında Oracle desteğini yitireceği açıklanmasına rağmen bir kaç yıl daha uzatıldığı için Java 17’nin ayrı bir önemi var. Şu an, en sonuncu LTS olduğu için, Java 8 kullanan uygulamaların geçirilebileceği bir versiyon olarak görülmekte.

Java 8

Java 8, 2014 Mart ayında yayınlandı. LTS’dir. Ve hala en çok kullanılan Java versiyonudur.

Bu popülerlikte, bir çok cezbedici özelliğinin olmasının payı büyüktür. Lambda, stream, functional programming gibi. Özellikle ‘lambda’, Java için büyük bir sıçrayış oldu.

Java 17 ve 8 arasındaki farklar

Bu makalede, önemli görülen değişikliklerden bahsedilecektir. Tüm detaylar için, resmi sitelere bakılabilir. Java API versiyonları kıyası için ise https://javaalmanac.io/ bu site kullanılabilir

  • Sealed sınıf

Sealed sınıflar, hangi sınıfların, modüllerin vs extend veya implement edebileceğini kontrol edebilen interface veya class’tır.

public sealed interface Service permits Bike, SkateBoard {

    int getMaxServiceIntervalInMonths();

    default int getMinimumAgeToUse() {
        return 100000;
    }
}

Burda, bu interface sadece Bike ve SkateBoard adlı sınıfların implement etmesine izin vermektedir.

  • var anahtar kelimesi

Local değişken tanımlamaları için, Java 10’dan itibaren, özel bir kelime olan ‘var’ kullanılabilir. Gerçek tipte tanımlamak yerine.

 public static void main(String[] args
    {
  
        // int
        var a = 1200;
  
        // double
        var b = 1.2390;
  
        // char
        var c = 'a';
  
        // string
        var d = "vegan";
  
        // boolean
        var e = true;)
}
  • switch ifadeleri

JDK12 ile birlikte switch expressions geldi. Switch statement gibi değiller. Mesela break koşuluna gerek yok:

//Switch Expression example
switch (x) {
	case Integer i -> String.format("int %d", i);
    case Long l    -> String.format("long %d", l);
}
//Switch Statement example
switch (x) {
  case Integer i: 
    String.format("int %d", i);
    break;
  case Long l:
    String.format("long %d", l); 
    break;
}
  • Text blocks

JDK13 ile birlikte çoklu String satırları geldi:

public static void main(String[] args) 
          static String textBlock = """
 one
  two
   three""";

static String ordinaryString=" one\n" +
        "  two\n" +
        "   three";
    }
  • switch’lerde pattern matching

JDK17 öncesi, switch statement’lerde sayılar, enum ve String olabiliyordu. Ama Java 17’de, null veya type’ları da kabul etmekte:

static Integer increase(Object o) 
        return switch (o) {
            case Integer i -> ++i;
            case String s -> Integer.parseInt(s) + 1;
            default -> throw new RuntimeException("unknown type");
        };
    }
  • Pattern Matching for instanceof

JDK14 itibari ile, instanceof ile bir değişkenin verilen type olup olmadığı test edilebilmekte. Hatta yeni bir yerel değişkene de atanabilmektedir:

  static Integer increment(Object o) 
        if (o instanceof Integer i) {
            return ++i;
        }

        if (o instanceof String s) {
            return Integer.parseInt(s) + 1;
        }
        throw new RuntimeException("unknown type");
    }
  • Hız

Optaplanner’in yaptığı testlere göre Java 17’deki Parallel Garbage Collector, önceki versiyondakilere göre %16 daha hızlı (https://www.optaplanner.org/blog/2021/09/15/HowMuchFasterIsJava17.html)

Ayrıca aynı testlere göre, Java 16 ParallelGC’den %0.37 ve Java 11’den %6.54 daha hızlı.

SONUÇ

Java 8 ile kıyaslandığında, Java 17 bir çok modern ve yararlı özelliği sahip. Yeni bir projeye başlarken, fayda sağlayabilecek bir çok özelliği mevcut.

Ama Java 8 uygulamasını, 17’ye taşımak için yeterli gelebilen sebepler olarak gözükse de, öncelik sıralamasında daha önemli bir şeyler yoksa, bu taşıma işleminin yapılması iyi olacaktır..

 

Kaynak: Caner Aydın

Bir cevap bırakın