Java 10

Paylaş

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.


Bunlarda ilgini çekebilir