JAVA8~11新特性

190 阅读1分钟

变量

Java10 开发人员可以选择让编译器使用var来推断类型

Java11 已经提高了lambda中的var能力

IntFunction<Integer> doubleIt1 = (int x) -> x * 2; // OK Java 10 and 11
IntFunction<Integer> doubleIt2 = (var x) -> x * 2; // OK Java 11

String新方法

java8 加入新方法join

Set<String> set1 = Set.of("a","b", "c");
List<String> list1 = List.of("a","b", "c");
  
System.out.println( String.join("a", "b", "c") );
System.out.println( String.join(".", set1) );
System.out.println( String.join(".", list1) );

java11 添加了更多的String的新方法

接口

java8:

  1. 常量Constant variables
  2. 抽象方法Abstract methods
  3. 默认方法Default methods
  4. 静态方法Static methods

Java9:

  1. Constant variables
  2. Abstract methods
  3. Default methods
  4. Static methods
  5. 私有方法Private methods
  6. 私有静态方法Private Static methods

Java11:

看一个接口的完整代码:

//generic interface with one type parameter T
interface SomeInterface<T> { 
 int SOME_CONSTANT = 35; // variable declaration
 int abstractMethod(int x, int y);   // method declaration
 T abstractMethodUsingGenericType(T[] array, int i); // method using type parameter
 default int defaultMethod(int x, int y) {
     // implementation of method
  return 0;
 }
 static void main(String[] args) {
     // any static method, including main can be included in interface
 }
 
 
 private void privateMethod(String[] args) {
     // any private  method can be included in interface
 }
 
 private static void staticMethod(String[] args) {
     // any private static method can be included in interface
 }
 
  // nested class definition
 class NestedClass { 
     // members of a class
 }
 // nested interface definition
 interface NestedInterface { 
     // member of an interface
 }
// nested enum definition
 enum NestedEnum {   
     OBJECT1,
     OBJECT2,
     ;
     // methods, variables and constructors
 }
  // nested annotation definition
 @interface NestedAnnotation {   
     String attrib1();
 }
}

Nullabe管理

java8引入了新的Optional。

java9中可以返回另外一个Optional ,使用增强方法ifPresentOrElse :也增加了stream方法。

Java10中有新的方法叫:orElseThrow

Java11中代码如下:Optional.of(string).isEmpty()

Stream

Java8 引入了新的Stream。

Java9中引入了iterate 和 takeWhile/dropWhile方法。

Stream.iterate(0, i -> i < 10, i -> i + 1) .forEach(System.out::println);
System.out.println("stream take while");


Stream<String> stream1 = Stream.iterate("", s -> s + "s")
      .takeWhile(s -> s.length() < 10);
  
stream1.forEach(System.out::println);

Java11引入了Not谓词,以前代码:

lines.stream()          
         .filter(s -> !s.isBlank())

现在可以是:

lines.stream()          
         .filter(Predicate.not(String::isBlank))