Eğitim Portalı/Java/Java 15 Yenilikleri (2020)
Java01-java/61-java15-yenilikleri

Java 15 Yenilikleri (2020)

Java 15, iki önemli dil özelliğini öne çıkardı: sealed sınıflar (önizleme) ve text blocks'un standartlaşması. Sealed sınıflar, kalıtım hiyerarşilerini kontrol altına alarak güvenli ve eksiksiz modelleme sağlar; text b…

Java 15 Yenilikleri (2020)

Java 15, iki önemli dil özelliğini öne çıkardı: sealed sınıflar (önizleme) ve text blocks'un standartlaşması. Sealed sınıflar, kalıtım hiyerarşilerini kontrol altına alarak güvenli ve eksiksiz modelleme sağlar; text blocks ise gelişmiş kaçış dizileriyle olgunlaştı.

Sealed sınıflar

Normalde bir sınıfı/arayüzü herkes uzatabilir. Ama bazen "bu tipin yalnızca şu belirli alt tipleri olabilir" demek istersin (ödeme tipleri, ifade ağacı düğümleri, sonuç türleri). sealed bunu sağlar:

sealed interface Odeme permits Kart, Havale, Kapida {}
record Kart(...) implements Odeme {}
record Havale(...) implements Odeme {}
record Kapida(...) implements Odeme {}

Kurallar:

  • permits ile izin verilen alt tipler açıkça listelenir (aynı dosyadalarsa permits yazılması zorunlu değildir).
  • İzinli alt tipler final, sealed veya non-sealed olmak zorundadır (hiyerarşi kontrollü kalsın; non-sealed o dalı yeniden herkese açar).

En büyük faydası, switch'te eksiksizlik denetimidir: derleyici tüm alt tipleri bildiği için default yazmana gerek kalmaz ve yeni bir tip eklersen switch'in güncellenmesi gerektiğini hatırlatır:

String s = switch (odeme) {
    case Kart k -> ...;
    case Havale h -> ...;
    case Kapida kp -> ...;   // default gerekmez — hepsi kapsandı
};

Örnek 1 (./Ornek1.java) sealed bir Odeme hiyerarşisini eksiksiz switch ile işler. (15'te önizleme, 17'de standart.)

Text blocks standart + gelişmiş kaçışlar

Java 13'te önizleme olan text blocks, Java 15'te standart oldu. İki yeni kaçış dizisiyle de güçlendi:

  • \ (satır sonunda): Satır devamı — yeni satırı bastırır. Kaynak kodda uzun bir metni birden çok satıra bölersin ama çıktı tek satır olur.
  • \s: Tek boşluk. Text block satır sonlarındaki boşlukları otomatik kırpar; \s bunu engelleyerek sabit genişlik/hizalama korur.
String s = """
        çok uzun bir \
        satır olarak değil";   // \ -> tek satır
String h = "isim:\s\s\sAda";   // \s -> boşluklar korunur

Örnek 2 (./Ornek2.java) HTML bloğu, satır devamı (\) ve \s ile hizalamayı gösterir.

Özet

Java 15'in iki yeniliğini öğrendik: kalıtımı kontrol altına alıp eksiksiz switch sağlayan sealed sınıflar (Örnek 1) ve standartlaşan text blocks ile gelişmiş kaçışlar (\ ve \s; Örnek 2). Sırada, records ve pattern matching'in standartlaştığı, sürüm batch'inin son halkası: Java 16.

Kod Örnekleri(2)

Ornek1

çalıştırılabilir
Ornek1.java
1// Ornek1: Java 15 — sealed sınıflar (kapalı hiyerarşi). (15 önizleme, 17 standart; JDK 21'de çalışır.)
2// Çalıştırma: java Ornek1.java
3public class Ornek1 {
4
5    // sealed: bu arayüzü/sınıfı yalnızca İZİN VERİLEN tipler uzatabilir/uygulayabilir.
6    sealed interface Odeme permits Kart, Havale, Kapida {}
7
8    // İzin verilen alt tipler: final (daha fazla uzatılamaz), sealed veya non-sealed olmalı.
9    record Kart(String no, double tutar) implements Odeme {}
10    record Havale(String iban, double tutar) implements Odeme {}
11    record Kapida(double tutar) implements Odeme {}
12
13    public static void main(String[] args) {
14        Odeme[] odemeler = { new Kart("1234", 250), new Havale("TR..", 1000), new Kapida(75) };
15
16        for (Odeme o : odemeler) {
17            // sealed olduğu için switch EKSİKSİZ; default GEREKMEZ (derleyici tüm tipleri bilir).
18            String sonuc = switch (o) {
19                case Kart k -> "Kart ödeme: " + k.tutar() + " TL (komisyon %2)";
20                case Havale h -> "Havale: " + h.tutar() + " TL (ücretsiz)";
21                case Kapida kp -> "Kapıda: " + kp.tutar() + " TL (+10 TL hizmet)";
22            };
23            System.out.println(sonuc);
24        }
25
26        System.out.println("""
27
28                --- Java 15: sealed sınıflar ---
29                sealed: bir tipin alt tiplerini KISITLAR ('permits' ile listelenir).
30                İzinli alt tipler final / sealed / non-sealed olmak ZORUNDADIR (hiyerarşi kontrollü kalır).
31                Faydası: switch'te EKSİKSİZLİK denetimi (default gerekmez), güvenli ve kapalı modelleme.
32                Tipik kullanım: sınırlı sayıda durum (ödeme tipleri, ifade ağaçları, sonuç türleri).
33                (15 önizleme, 17 standart.)""");
34    }
35}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek2

çalıştırılabilir
Ornek2.java
1// Ornek2: Java 15 — text blocks STANDART + gelişmiş kaçış dizileri (\s ve satır devamı \).
2// Çalıştırma: java Ornek2.java
3public class Ornek2 {
4
5    public static void main(String[] args) {
6        // Standart text block — HTML örneği
7        String html = """
8                <ul>
9                    <li>Java</li>
10                    <li>Spring</li>
11                </ul>""";
12        System.out.println("HTML:\n" + html);
13
14        // \ (satır sonunda): satır DEVAMI — yeni satır eklemeyi BASTIRIR (uzun tek satır).
15        String tekSatir = """
16                Bu cümle kaynak kodda \
17                üç satıra bölündü ama \
18                çıktıda tek satır.""";
19        System.out.println("\nSatır devamı (\\):\n" + tekSatir);
20
21        // \s : bir BOŞLUK; satır sonundaki boşlukların kırpılmasını engeller (sabit genişlik).
22        String hizalı = """
23                isim:\s\s\s\sAda
24                soyisim:\sYılmaz""";
25        System.out.println("\n\\s ile boşluk koruma:\n" + hizalı);
26
27        System.out.println("""
28
29                --- Java 15: text blocks standart + kaçışlar ---
30                Java 13'te önizleme olan text blocks, Java 15'te STANDART oldu.
31                Gelişmiş kaçışlar:
32                  \\  (satır sonunda): satır devamı — yeni satırı bastırır (uzun metni kodda bölersin).
33                  \\s : tek boşluk — satır sonu boşluklarının otomatik kırpılmasını engeller.
34                Bu kaçışlar, hizalama ve uzun satır kontrolü için metin bloklarını tamamlar.""");
35    }
36}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.