JDK8的新特性
阿新 • • 發佈:2018-04-21
方法的參數 ora public fin ger reference true test function
Java 8 (又稱為 jdk 1.8) 是 Java 語言開發的一個主要版本。Oracle 公司於 2014 年 3 月 18 日發布 Java 8 ,它支持函數式編程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。
應該說,相對於Java7,Java8 新增了很多特性,我們主要討論以下幾個:
1.Lambda表達式。
Lambda 表達式,也可以稱為閉包,它允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)。使用 Lambda 表達式可以使代碼變的更加簡潔緊湊。
package com.itszt.test2; import java.util.ArrayList; import java.util.List; /** * JDK8的新特性 */ public class Test { //測試數據 public static List<Integer> list = new ArrayList<>(); public static void main(String[] args) { int[] intArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (Integer i : intArr) { list.add(i); } Test test = new Test(); //測試Lambda表達式 test.testLambda(list); } public void testLambda(List list) { list.forEach(System.out::println); list.forEach(e -> System.out.println("方式二:" + e)); } }
2.方法引用。
方法引用通過方法的名字來指向一個方法。
方法引用可以使語言的構造更緊湊簡潔,減少冗余代碼。
方法引用使用一對冒號 :: 。
比如,上述代碼中就使用了方法引用。再比如:
public void testMethodReference() { //構造器引用。語法是Class::new,或者更一般的Class< T >::new, // 要求構造器方法是沒有參數 final Car car = Car.create(Car::new); final List<Car> cars = Arrays.asList(car); //靜態方法引用。語法是Class::static_method,要求接受一個Class類型的參數; cars.forEach(Car::collide); //任意對象的方法引用。它的語法是Class::method。無參,所有元素調用; cars.forEach(Car::repair); //特定對象的方法引用,它的語法是instance::method。有參,在某個對象上調用方法,將列表元素作為參數傳入; final Car police = Car.create(Car::new); cars.forEach(police::follow); } public static class Car { public static Car create(final Supplier<Car> supplier) { return supplier.get(); } public static void collide(final Car car) { System.out.println("靜態方法引用 " + car.toString()); } public void repair() { System.out.println("任意對象的方法引用 " + this.toString()); } public void follow(final Car car) { System.out.println("特定對象的方法引用 " + car.toString()); } }
3.函數式接口。
函數式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。
函數式接口可以被隱式轉換為lambda表達式。
函數式接口可以現有的函數友好地支持 lambda。
JDK 1.8之前已有的函數式接口:
- java.lang.Runnable
- java.util.concurrent.Callable
- java.security.PrivilegedAction
- java.util.Comparator
- java.io.FileFilter
- java.nio.file.PathMatcher
- java.lang.reflect.InvocationHandler
- java.beans.PropertyChangeListener
- java.awt.event.ActionListener
- javax.swing.event.ChangeListener
JDK 1.8 新增加的函數接口:
- java.util.function
JDK8的新特性