Статья уже сильно запоздавшая, конечно. Я даже не знаю, что сказать. Эти версии… Они так быстро меняются. С описаниями новых возможностей каждого выпуска Java, начиная с Java 8, вы можете ознакомиться моем учебнике.
Итак, что же у нас появилось в Java 15. Как мы знаем, Java уже совсем не тот язык, что был десять лет назад. Если сравнивать текущий язык с Java 6, то сам подход уже немного другой. Возможностей стало намного больше, а язык больше не так строг, как раньше…
- Новый алгоритм шифрования Edwards-Curve Digital Signature
- Запечатанные классы
- Скрытые классы
- Удален Nashorn Javascript Engine
- Pattern matching for instanceof
- Сборщик мусора ZGC
- Текстовые блоки
- Записи
Новый алгоритм шифрования Edwards-Curve Digital Signature
Вряд ли вам придётся применять, его когда-нибудь, разве только если вы делаете что-то совсем специфическое. Упоминаю этот алгоритм только для общего развития.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Пример генерации пары ключей и подписи KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519"); KeyPair kp = kpg.generateKeyPair(); // algorithm is pure Ed25519 Signature sig = Signature.getInstance("Ed25519"); sig.initSign(kp.getPrivate()); sig.update(msg); byte[] s = sig.sign(); // Пример создания экземпляра KeyFactory для создания ключей KeyFactory kf = KeyFactory.getInstance("EdDSA"); boolean xOdd = ... BigInteger y = ... NamedParameterSpec paramSpec = new NamedParameterSpec("Ed25519"); EdECPublicKeySpec pubSpec = new EdECPublicKeySpec(paramSpec, new EdPoint(xOdd, y)); PublicKey pubKey = kf.generatePublic(pubSpec); |
Запечатанные классы
Запечатанные классы явно указывают список классов, которые могут их расширять. Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
fedor@fedor-Aspire-A315-42:~/programs/jdk-15.0.1/bin$ ./jshell --enable-preview | Welcome to JShell -- Version 15.0.1 | For an introduction type: /help intro jshell> public abstract sealed class Animal permits Dog, Cat {} | created class Animal, however, it cannot be referenced until class Dog, and class Cat are declared jshell> public final class Dog extends Animal {} | created class Dog, however, it cannot be referenced until class Animal is declared jshell> public final class Cat extends Animal {} | created class Cat |
Эта возможность добавлена только как preview-фича, а значит без параметра --enable-preview она недоступна, а также она может быть удалена в последующих релизах. Пока не буду подробно описывать эту фичу, когда окончательно утвердят, то тогда подробно и опишу. Текущая реализация вполне может быть кардинально изменена в последующих релизах Java.
Скрытые классы
Многие языки программирования для JVM (не только Java) используют генерацию классов во время выполнения. Например, в случае с Java лямбда выражения не создают классов во время компиляции с javac, вместо этого он классы создаются во время выполнения с помощью LambdaFactory. Разумеется, хотелось бы, чтобы эти классы не были доступны через Reflection; чтобы они могли выгружаться из памяти, когда становятся не нужны; а также имели доступны из класса, который их породил. До Java 15 такой возможности не было. Сейчас же их можно создавать с помощью Lookup::defineHiddenClass. Не думаю, что вам стоит углубляться в дебри создания скрытых классов. Это больше пригодится разработчикам фреймворков, наверное, да и то не всегда. Если нужно, то можете изучить подробности этой возможности в официальном описании.
Удален Nashorn Javascript Engine
Тут сложно что-то описать. Просто его больше нет.
Pattern matching for instanceof
В Java 14 это было введено в качестве preview. В Java 15 оно тоже находится в стадии preview. Я не буду лишний раз описывать, можете прочесть мое описание из нововведений в Java 14.
Сборщик мусора ZGC
Ранее был экспериментальным сборщиком мусора в Java 11. Теперь он окончательно вошел в релиз и включается с помощью опций:
1 |
-XX:+UseZGC |
Текстовые блоки
Текстовые блоки давно переходят из одной версии в другую, но как экспериментальная возможность. В Java 15 они окончательно вошли в Java в том виде, как я их описывал в статье про Java 14.
Пример:
1 2 3 4 5 6 7 8 9 10 11 |
String colors = """ red \s green\s blue \s """; String text = """ Lorem ipsum dolor sit amet, consectetur adipiscing \ elit, sed do eiusmod tempor incididunt ut labore \ et dolore magna aliqua.\ """; |
Записи
Это уже второе preview для этой возможности. Прошлый раз я их описывал в статье про Java 14.