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:
permitsile izin verilen alt tipler açıkça listelenir (aynı dosyadalarsapermitsyazılması zorunlu değildir).- İzinli alt tipler
final,sealedveyanon-sealedolmak zorundadır (hiyerarşi kontrollü kalsın;non-sealedo 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;\sbunu 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ılabilir1// 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}Ornek2
çalıştırılabilir1// 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}