Java SE 11, которая также называется 18.9 (основана на новой схеме именования, в которой используются год и месяц выпуска), должна быть GA в последнюю неделю сентября. Новый подход к выпуску новой версии JDK часто позволяет создателям языка внедрять новые функции, быстрее обновлять API для сообщества разработчиков.
Часто обновления API остаются незамеченными и подпадают под некоторые серьезные изменения. Поэтому я подумал о перечислении некоторых изменений API, которые будут в Java 11, которых не было в Java 10.
Я использую сборку jdk-11-ea + 16, загруженную отсюда
Character.toString (целое)
Этот метод возвращает строковое представление для заданной кодовой точки Unicode, как показано ниже:
1
2
3
4
|
jshell> Character.toString(100) $10 ==> "d" jshell> Character.toString(66) $7 ==> "B" |
CharacterSequence.compare (java.lang.CharSequence, java.lang.CharSequence)
Это сравнивает двухсимвольную последовательность лексикографически и возвращает отрицательный, ноль или положительный результат, если первая символьная последовательность лексикографически меньше или равна или больше второй соответственно.
Лексикографически означает словарный порядок или алфавитный порядок.
1
2
3
4
5
6
7
8
|
jshell> CharSequence.compare( "girl" , "boy" ) $12 ==> 5 jshell> CharSequence.compare( "girl" , "girl" ) $13 ==> 0 jshell> CharSequence.compare( "hello" , "world" ) $14 ==> -15 |
Новые API в java.lang.String
повтор (INT)
01
02
03
04
05
06
07
08
09
10
11
12
13
|
jshell> "**" .repeat(5) $15 ==> "**********" jshell> "**" .repeat(-7) | Exception java.lang.IllegalArgumentException: count is negative: -7 | at String.repeat (String.java:3147) | at ( #16:1) jshell> "**" .repeat(0) $17 ==> "" jshell> "**" .repeat(1) $18 ==> "**" |
ISBLANK ()
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
jshell> String msg = "hello" msg ==> "hello" jshell> msg.isBlank() $22 ==> false jshell> String msg = "" msg ==> "" jshell> msg.isBlank() $24 ==> true jshell> String msg = " " msg ==> " " jshell> msg.isBlank() $26 ==> true |
strip (), stripTrailing (), stripLeading ()
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
jshell> " hello world " .strip() $29 ==> "hello world" jshell> "hello world " .strip() $30 ==> "hello world" jshell> "hello world " .stripTrailing() $31 ==> "hello world" jshell> " hello world " .stripLeading() $32 ==> "hello world " jshell> " " .strip() $33 ==> "" |
линии ()
01
02
03
04
05
06
07
08
09
10
11
|
jshell> String content = "this is a multiline content\nMostly obtained from some file\rwhich we will break into lines\r\nusing the new api" content ==> "this is a multiline content\nMostly obtained fro ... ines\r\nusing the new api" jshell> content.lines() $36 ==> java.util.stream.ReferencePipeline$Head@5ec0a365 jshell> content.lines().forEach(System.out::println) this is a multiline content Mostly obtained from some file which we will break into lines using the new api |
java.nio.file.Path.of ()
До этого выпуска в java.nio.file.Path
не было фабричных методов, в то время как в java.nio.file.Path
был один метод. Этот выпуск представляет фабричный метод в java.nio.file.Path
который имеет два варианта:
1. Принимает строковое местоположение для ресурса
2. Принимает местоположение URI к ресурсу
Оба они показаны ниже:
1
2
3
4
5
6
7
8
9
|
jshell> Path uriPath = Path.of(new URI( "file:///C:/Program%20Files/Java/jdk-11/release" )) uriPath ==> C:\Program Files\Java\jdk-11\release jshell> Files.readAllLines(uriPath).forEach(System.out::println) jshell> Path filePath = Path.of( ".." , "release" ) filePath ==> ..\release jshell> Files.readAllLines(filePath).forEach(System.out::println) |
Pattern.asMatchPredicate ()
Этот API возвращает java.util.function.Predicate
который можно использовать для проверки соответствия заданной строки шаблону, скомпилированному с использованием java.util.regex.Pattern
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
jshell> Pattern somePattern = Pattern.compile( "\\w+@\\w+[.]com" ) somePattern ==> \w+@\w+[.]com jshell> Predicate<String> somePredicate = somePattern.asMatchPredicate() somePredicate ==> java.util.regex.Pattern$$Lambda$26 /0x00000008000d0840 @34c4973 $55 ==> false $56 ==> true jshell> somePredicate. test ( "sana#@gmail.com" ) $57 ==> false |
API, связанные с Java EE, а именно Corba, JAXB, JAX WS (веб-службы), удаляются. Клиентская библиотека HTTP, которая находилась в инкубаторе до тех пор, пока Java 10 не была перемещена из инкубатора в собственный модуль java.net.http
. Я скоро напишу несколько постов о новом клиенте HTTP.
Опубликовано на Java Code Geeks с разрешения Мохамеда Санауллы, партнера нашей программы JCG . См. Оригинальную статью здесь: Обновления API в Java SE 11 (18.9)
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |