变量
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:
- 常量Constant variables
- 抽象方法Abstract methods
- 默认方法Default methods
- 静态方法Static methods
Java9:
- Constant variables
- Abstract methods
- Default methods
- Static methods
- 私有方法Private methods
- 私有静态方法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))