Java становится похожа на Kotlin
Java с каждой версией все больше и больше похожа на Kotlin/Scala/C#. И если раньше была вполне очевидная ниша для enterprise-языка с низким порогом вхождения, то сейчас это уже получается весьма странный зверь.
В 8 java завезли функциональные методы работы с коллекциями, лямбды и Optional.
В 10 java добавили var.
С 12 java switch
может быть выражением.
В 13 java добавили тройные кавычки для строковых литералов.
В грядущей 14 версии добавят:
- записи (как data-классы Kotlin)
- паттерн матчинг в стиле C#
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.toUpperCase());
}
Но есть и довольно клевая фича, которая выгодно отличает от других: хорошее описание для NPE, которое говорит, в каком именно методе цепочки была ошибка, а не тупо строчку:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.toUpperCase()" because the return value of "Address.getStreet()" is null
at Program.getStreetFromRequest(Program.java:10)
at Program.main(Program.java:6)
В 15 java обещают sealed типы. Движение в сторону здорового паттерн-матчинга.
См. также википедию и статью на хабре.