Первые бета сборки JDK 13 уже доступны, можно пощупать. Релиз планируется в Сентябре 2019.
Из новинок: сырые строковые литералы (которые не вошли в JDK 12) и switch expressions.
Сырые строковые литералы
Сырые строковые литералы (JEP 326) — весьма приятная штука. В JDK 13 планируется как opt-in beta, а затем достичь production-qiality к JDK 14.
Пример с File Paths
Раньше было так:
1 |
Runtime.getRuntime().exec("\"C:\\Program Files\\foo\" bar"); |
Теперь можно так:
1 |
Runtime.getRuntime().exec(`"C:\Program Files\foo" bar`); |
Multi-line
Раньше было так:
1 2 3 4 5 |
String html = "<html>\n" + " <body>\n" + " <p>Hello World.</p>\n" + " </body>\n" + "</html>\n"; |
Теперь можно так:
1 2 3 4 5 6 |
String html = `<html> <body> <p>Hello World.</p> </body> </html> `; |
Регулярки
Раньше было так:
1 |
System.out.println("this".matches("\\w\\w\\w\\w")); |
Теперь можно так:
1 |
System.out.println("this".matches(`\w\w\w\w`)); |
Escapes
Добавили public String unescape()
:
1 2 3 4 |
boolean b0 = `\n`.equals("\\n"); boolean b1 = `\n`.unescape().equals("\n"); boolean b2 = `\n`.length == 2; boolean b3 = `\n`.unescape().length == 1; |
В придачу появился public String escape()
:
1 2 3 4 |
boolean b0 = "\n".escape().equals(`\n`); boolean b1 = `•`.escape().equals(`\u2022`); boolean b2 = "•".escape().equals(`\u2022`); boolean b3 = !"•".escape().equals("\u2022"); |
Более подробно в спеке JEP 326.
Switch Expressions
Подробно в спеке JEP 325.
Расширены возможности switch
, чтоб можно было использовать выражения. К примеру, появился case L ->
свич:
1 2 3 4 5 6 |
switch (day) { case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); case TUESDAY -> System.out.println(7); case THURSDAY, SATURDAY -> System.out.println(8); case WEDNESDAY -> System.out.println(9); } |
Можно сразу присвоить результат свича:
1 2 3 4 5 6 |
int numLetters = switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9; }; |
С «case L ->» можно упростить свич. Выполняться будет только выражения справа, остальные кейсы не будут.
1 2 3 4 5 6 7 |
static void howMany(int k) { switch (k) { case 1 -> System.out.println("one"); case 2 -> System.out.println("two"); case 3 -> System.out.println("many"); } } |
Тогда код:
1 2 3 |
howMany(1); howMany(2); howMany(3); |
Выведет:
1 2 3 |
one two many |
Где скачать JDK 13?
Скачать JDK 13 можно с jdk.java.net. Можете также почитать Release notes.