Java 14 versiyonu 17 Mart’ta yayınlanacak. Peki bu versiyon içerisinde bizi ne bekliyor
- Gelişmiş Switch ifadeleri. Bunlar aslın 12, 13’de gösterilmişti Java 14 bunu tamamen destekler hale getirildi.
- Text blocklarının daha düzgün şekilde yazılabilmesi.
- instanceof ile pattern matching yapabilme özelliği
- NullPointerException’ların daha yardımcı hale getirilmesi.
Switch İfadeleri
Amaçlanan daha kolay bir yazımdı ve artık switch ifadeleri şu şekilde yazılabilir oldu:
1 2 3 4 5 6 7 8 9 10 |
var log = switch (event) { case PLAY -> "User has triggered the play button"; case STOP, PAUSE -> "User needs a break"; default -> { String message = event.toString(); LocalDateTime now = LocalDateTime.now(); yield "Unknown event " + message + " logged on " + now; } }; |
Text blokları artık daha temiz bir şekilde yazılabilir. Aslında bu python’da vardı artık Java’ya da geldi.
1 2 3 4 5 |
String html = "<HTML>" + "\n\t" + "<BODY>" + "\n\t\t" + "<H1>\"Java 14 is here!\"</H1>" + "\n\t" + "</BODY>" + "\n" + "</HTML>"; |
Şeklinde yazılan bir String artık:
1 2 3 4 5 6 |
String html = """ <HTML> <BODY> <H1>"Java 14 is here!"</H1> </BODY> </HTML>"""; |
Şeklinde yazılabilir. Çoklu satır yazarken kullandığımız + işaretine de gerek kalmayacak böylece. Artık
1 2 3 4 5 |
String text = """ Lorem ipsum dolor sit amet, consectetur adipiscing \ elit, sed do eiusmod tempor incididunt ut labore \ et dolore magna aliqua.\ """; |
Şeklinde yazabiliriz.
Instanceof için Pattern Matching:
1 2 3 4 5 6 |
if (obj instanceof Group) { Group group = (Group) obj; // use group specific methods var entries = group.getEntries(); } |
Normalde yukarıdaki gibi yapılan bir kontrol artık:
1 2 3 |
if (obj instanceof Group group) { var entries = group.getEntries(); } |
Beni en heyecanlandıran yenilik ise Record yapısının gelmesi. Aslında bu da diğer dillerde çokça kullanılan bir özellik. Bu kullanım ile get,set, toString(), hashCode() ve equals() yazmaya gerek kalmayacaktır.
Şu şekilde örnek verecek olursak mesela:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
public class BankTransaction { private final LocalDate date; private final double amount; private final String description; public BankTransaction(final LocalDate date, final double amount, final String description) { this.date = date; this.amount = amount; this.description = description; } public LocalDate date() { return date; } public double amount() { return amount; } public String description() { return description; } @Override public String toString() { return "BankTransaction{" + "date=" + date + ", amount=" + amount + ", description='" + description + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; BankTransaction that = (BankTransaction) o; return Double.compare(that.amount, amount) == 0 && date.equals(that.date) && description.equals(that.description); } @Override public int hashCode() { return Objects.hash(date, amount, description); } } |
şeklinde bir sınıf yazmak yerine sadece:
1 2 3 |
public record BankTransaction(Date date, double amount, String description) {} |
Yazmak yeterli olacaktır. Çok temiz entity sınıfları olacak böylece. Tabi bu entity sınıfları olacak böylece. Daha yardımcı NullPointerExceptionlar NullPointerException tüm java programcıları için baş belası. Mimariye göre objenin alt alanlarına erişim arttıkça bunun olma ihtimali de artmakta. Şu anda alınan bir problem şu şekilde gösterilmekte. Örneğin:
1 |
var name = user.getLocation().getCity().getName(); |
ile City’nin ismini alacak olalım.
Şu anda alacağımız hata:
1 2 |
Exception in thread "main" java.lang.NullPointerException at NullPointerExample.main(NullPointerExample.java:5) |
Java 14 sonrasında ise:
1 |
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Location.getCity()" because the return value of "User.getLocation()" is null at NullPointerExample.main(NullPointerExample.java:5) |
Gördüğünüz gibi artık nerede NullPointerException alındığı yazıyor.