11

HTTP Client

feature

  • 完全支持异步非阻塞
  • package java.net.http
  • RX Flow
  • HTTP/2

sample

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("http://openjdk.java.net/"))
      .build();
client.sendAsync(request, BodyHandlers.ofString())
      .thenApply(HttpResponse::body)
      .thenAccept(System.out::println)
      .join();

Lambda 表达式中使用 var 进行参数声明

sample

@Nonnull var x = new Foo();
(@Nonnull var x, @Nullable var y) -> x.process(y)

DOC

10

局部变量类型推断

deature

  • 省略通常不必要的局部变量类型初始化声明
  • 留类型名称 var

sample

var x = new Foo();
for (var x : xs) { ... }
try (var x = ...) { ... } catch ...

增强 java.util.Locale 类及其相关的 API

sample

java.time.format.DateTimeFormatter::localizedBy

9

模块系统

Javadoc

集合工厂方法

feature

  • 高度优化
  • 不可变的

sample

Set<Integer> ints = Set.of(1, 2, 3);
List<String> strings = List.of("first", "second");

改进的 Stream API

feature

  • iterate 新重载方法
  • dropWhile
  • takeWhile
  • ofNullable
  • Optional 和 Stream 之间的结合

sample

IntStream.iterate(1, i -> i < 100, i -> i + 1).forEach(System.out::println);

Stream<Integer> s = Optional.of(1).stream();

私有接口方法

sample

public interface MyInterface {

    void aInterfaceMethod();

    default void aDefaultMethod() {  init(); }

    default void bDfaultMethod() { init(); }

    private void init() { System.out.println("Initializing"); }
}