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 ==> 5jshell> CharSequence.compare("girl", "girl")$13 ==> 0jshell> 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 ==> falsejshell> String msg = ""msg ==> ""jshell> msg.isBlank()$24 ==> truejshell> 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@5ec0a365jshell> content.lines().forEach(System.out::println)this is a multiline contentMostly obtained from some filewhich we will break into linesusing 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\releasejshell> Files.readAllLines(uriPath).forEach(System.out::println)jshell> Path filePath = Path.of("..", "release")filePath ==> ..\releasejshell> 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+[.]comjshell> Predicate<String> somePredicate = somePattern.asMatchPredicate()somePredicate ==> java.util.regex.Pattern$$Lambda$26/0x00000008000d0840@34c4973jshell> somePredicate.test("sana@gmail.net")$55 ==> falsejshell> somePredicate.test("sana@gmail.com")$56 ==> truejshell> 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, являются их собственными. |