Java 10
Java 10 sürümündeki var, versiyonlama, koleksiyonlar, collectors, optional ve derleyici yenilik, düzenlemeler örnekleri ve kullanımı ile yer alıyor.
Local-Variable Type Inference – JEP 286
Yerel değişkenler için değişken türünü belirtmeden var ifadesi kullanılarak değişken kullanma imkanı gelmiştir.
var ifadesi anahtar kelime değildir yani değişken adı, metot adı veya paket adı olabilir.
public class App {
// private var myStr; // hata verir
public static void main(String[] args) {
String var = "String var";
// var myName; // hata verir
var myName = "Yusuf";
System.out.println(myName);
myName = "Yusuf Sezer";
// myName = 1; // hata verir
System.out.println(myName);
System.out.println(myName.length());
var myNumber = new ArrayList<>(); // Diamond operator
myNumber.addAll(Arrays.asList(1, 2, 3));
int fMyNumber = (int) myNumber.get(0);
System.out.println(fMyNumber);
var myNumber2 = new ArrayList<Integer>(); // Integer
myNumber2.addAll(Arrays.asList(1, 2, 3));
var fMyNumber2 = myNumber2.get(0);
System.out.println(fMyNumber2);
int result = var(fMyNumber2); // metot
System.out.println(result);
// var myObj = null; // hata verir
// var myArr[] = new byte[]{1, 2, 3}; // hata verir
// var myNum = {1, 2, 3}; // hata verir
// var myNum2[] = {1, 2, 3}; // hata verir
// var n1=1, n2=2, n3=3; // hata verir
}
public static int var(int n1) {
return 1453 + n1;
}
// private static *var* method(**var** myVar) {} // hata verir
}
İfadenin kullanım amacı daha sade kod yazımıdır.
Time-Based Release Versioning – JEP 322
Sürüm yapısı aşağıdaki gibi olmuştur.
$FEATURE.$INTERIM.$UPDATE.$PATCH
Sürüm bilgisini için Runtime sınıfı veya Property kullanılabilir.
public class App {
public static void main(String[] args) {
// runtime
Runtime.Version version = Runtime.version();
System.out.println(version.feature());
System.out.println(version.interim());
System.out.println(version.update());
System.out.println(version.patch());
System.out.println(SourceVersion.latest());
// property
System.out.println(System.getProperty("java.version.date"));
System.out.println(System.getProperty("java.version"));
System.out.println(System.getProperty("java.runtime.version"));
System.out.println(System.getProperty("java.vm.version"));
System.out.println(System.getProperty("java.specification.version"));
System.out.println(System.getProperty("java.vm.specification.version"));
}
}
Koleksiyonlar
Koleksiyonları copyOf metodu eklenmiştir.
public class App {
public static void main(String[] args) {
List<Integer> myNumbers = new ArrayList<>();
myNumbers.add(1);
myNumbers.add(2);
List<Integer> list = List.copyOf(myNumbers);
System.out.println(list);
Set<Integer> set = Set.copyOf(myNumbers);
System.out.println(set);
Map<Integer, String> map = new HashMap<>();
map.put(1, "bir");
map.put(2, "iki");
Map<Integer, String> map2 = Map.copyOf(map);
System.out.println(map2);
}
}
Collectors
Stream API ile birlikte koleksiyon işlemlerinde kullanılan Collectors sınıfına toUnmodifiableList, toUnmodifiableSet, toUnmodifiableMap metotları eklenmiştir.
public class App {
public static void main(String[] args) {
// toUnmodifiableList
List<Integer> list = IntStream.range(1, 10)
.boxed()
.collect(Collectors.toUnmodifiableList());
System.out.println(list);
System.out.println(list.getClass().getName());
// toUnmodifiableSet
Set<Integer> set = IntStream.range(1, 10)
.boxed()
.collect(Collectors.toUnmodifiableSet());
System.out.println(set);
System.out.println(set.getClass().getTypeName());
// toUnmodifiableMap
Map<Integer, Double> map
= IntStream.range(1, 10)
.boxed()
.collect(Collectors.toUnmodifiableMap(
i -> i,
i -> Math.pow(i, 3))
);
System.out.println(map);
System.out.println(map.getClass().getTypeName());
}
}
Optional
null kontrolü için kullanılan Optional sınıfına orElseThrow metodu eklenmiştir.
public class App {
public static void main(String[] args) {
String result = Stream.of("Yusuf", "Sefa", "Sezer")
.filter(s -> s.startsWith("A"))
.findAny()
.orElseThrow();
System.out.println(result);
}
}
Diğer
Java 10 ile birlikte JEP 317 kodu ile deneysel JIT, AOT desteği olan Graal, JEP 310 kodu ile hızlı başlatma, JEP 307 kodu ile paralel çalışan çöp toplayıcı (GC) gibi Java alt yapısınında önemli değişiklikler yapılmıştır.
Bu değişikliklerin nedeni docker, kubernetes gibi bulut tabanlı ortamlarda Java uygulamalarının daha hızlı ve az bellek kullanmasını sağlamaktır.
Java Derslerine buradan ulaşabilirsiniz.
Hayırlı günler dilerim.