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, являются их собственными.  |