Java 20 Yenilikleri (2023)
Java 20, LTS olmayan bir rafine etme (refinement) sürümüdür: yeni "büyük" özellikler getirmek yerine, Java 21 LTS'te standartlaşacak özellikleri önizleme iterasyonlarıyla olgunlaştırdı. Bu yüzden Java 20'yi, 21'e gide…
Java 20 Yenilikleri (2023)
Java 20, LTS olmayan bir rafine etme (refinement) sürümüdür: yeni "büyük" özellikler getirmek yerine, Java 21 LTS'te standartlaşacak özellikleri önizleme iterasyonlarıyla olgunlaştırdı. Bu yüzden Java 20'yi, 21'e giden son hazırlık adımı olarak düşünmek doğrudur. Burada, bu süreçte olgunlaşan switch pattern matching'e odaklanıyoruz (örnek JDK 21'de çalışır).
switch pattern matching olgunlaşması
Java 17-20 boyunca önizleme olan, Java 21'de standartlaşan switch için pattern matching, üç gücü bir araya getirir:
String sonuc = switch (o) { case Integer i when i > 100 -> "büyük sayı"; // tip deseni + 'when' KORUYUCUSU case Integer i -> "sayı"; // tip deseni case String s when s.isBlank() -> "boş metin"; case String s -> "metin: " + s; case null -> "null"; // null'ı switch İÇİNDE ele al default -> "diğer"; };
- Tip deseni (
case Integer i): kontrol + cast + bağlama tek adımda. - Koruyucu (
when koşul): aynı tip için ek koşula göre dallan. case null: Eskiden switch'tenullher zamanNullPointerExceptionatardı; artıkcase nullile güvenle ele alınır.
Örnek 1 (./Ornek1.java) bu özelliği, eski uzun if/else + instanceof + cast zinciriyle
karşılaştırır. Sonuç çok daha okunaklı ve güvenlidir.
Java 20'nin olgunlaştırdığı diğer özellikler (hepsi önizleme/inkübatör)
- Record Patterns (2. önizleme): iç içe record ayrıştırma (topic 99) — 21'de standart.
- Sanal Thread'ler (2. önizleme): ucuz eşzamanlılık (topic 99) — 21'de standart.
- Scoped Values (inkübatör): thread'ler arası değişmez veri paylaşımı (ThreadLocal'a modern, sanal-thread-dostu alternatif).
- Structured Concurrency (2. inkübatör): ilişkili görevleri tek birim olarak yönetme.
Neden "rafine etme" sürümleri önemli?
Java'nın 6 aylık tempo + önizleme modeli, büyük özelliklerin acele edilmeden olgunlaşmasını sağlar: bir özellik birkaç sürüm boyunca topluluk geri bildirimiyle iyileştirilir, sonra standartlaşır. Java 20 gibi sürümler bu sürecin parçasıdır — tek başına az "yeni" şey içerse de, 21 LTS'in sağlamlığını hazırlar.
Özet
Java 20'nin bir rafine etme sürümü olduğunu ve 21 LTS'e giden hazırlığı yaptığını; bu süreçte
olgunlaşan switch pattern matching'i (tip deseni + when koruyucusu + case null; Örnek 1)
öğrendik; record patterns, sanal thread'ler, scoped values ve structured concurrency'nin önizleme
ilerleyişine değindik. Sırada, tüm bu özelliklerin meyvesini toplayan büyük LTS: Java 21.
▶ Kod Örnekleri(1)
Ornek1
çalıştırılabilir1// Ornek1: Java 20 — switch pattern matching olgunlaşıyor: 'when' koruyucuları + null + desenler.
2// (17-20 boyunca önizleme; Java 21'de STANDART. Örnek JDK 21'de çalışır.)
3// Çalıştırma: java Ornek1.java
4public class Ornek1 {
5
6 public static void main(String[] args) {
7 Object[] girdiler = { 250, 42, " ", "merhaba", 3.14, null };
8
9 for (Object o : girdiler) {
10 // ÖNCESİ: uzun if/else + instanceof + cast + ayrı null kontrolü.
11 String eski;
12 if (o == null) eski = "null";
13 else if (o instanceof Integer && (Integer) o > 100) eski = "büyük sayı";
14 else if (o instanceof Integer) eski = "sayı";
15 else if (o instanceof String && ((String) o).isBlank()) eski = "boş metin";
16 else if (o instanceof String s) eski = "metin: " + s;
17 else eski = "diğer";
18
19 // SONRASI: switch + tip deseni + 'when' koruyucusu + 'case null' — tek, okunaklı blok.
20 String yeni = switch (o) {
21 case Integer i when i > 100 -> "büyük sayı";
22 case Integer i -> "sayı";
23 case String s when s.isBlank() -> "boş metin";
24 case String s -> "metin: " + s;
25 case null -> "null"; // null'ı switch İÇİNDE ele al
26 default -> "diğer";
27 };
28 System.out.printf("%-10s -> eski:%-12s yeni:%s%n", String.valueOf(o), eski, yeni);
29 }
30
31 System.out.println("""
32
33 --- Java 20: switch pattern matching olgunlaşması ---
34 Java 20, ağırlıklı bir 'rafine etme' sürümüdür: record patterns, switch pattern matching ve
35 sanal thread'ler ÖNİZLEME iterasyonlarıyla son haline yaklaştı (Java 21'de standart oldular).
36 switch pattern matching: 'case Tip x' (tip deseni) + 'when koşul' (koruyucu/guard) + 'case null'.
37 -> tipe, iç yapıya VE ek koşula göre tek blokta dallanma; uzun if/else+instanceof zincirini siler.
38 Java 20 ayrıca: scoped values (inkübatör), structured concurrency (2. inkübatör) ilerletti.""");
39 }
40}