在Java 8中,引入了方法引用(Method Reference)和构造器引用(Constructor Reference)这两个特性,它们用于简化Lambda表达式,使代码更加清晰易读。
import java.util.List;
import java.util.ArrayList;
public class MethodReferenceExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
// 使用方法引用打印每個名字
names.forEach(System.out::println);
// 使用構造器引用創建一個新的ArrayList物件
List<String> newList = createList(ArrayList::new);
}
// 構造器引用示例
public static <T> List<T> createList(Creator<List<T>> creator) {
return creator.create();
}
}
// 自定義的函數式接口,用於創建物件
interface Creator<T> {
T create();
}
// 定義車輛工廠介面
interface ICarFactory {
// 創建車輛物件
CarBean getCar(String brand, int speed);
// 靜態方法,打印車輛信息
static void printCarInfo(CarBean car) {
System.out.println("Car Name:" + car.getBrand() + " / Max Speed:" + car.getMaxSpeed());
}
}
// 車輛類別
class CarBean {
private String brand;
private int maxSpeed;
CarBean(String brand, int maxSpeed) {
this.brand = brand;
this.maxSpeed = maxSpeed;
}
String getBrand() {
return brand;
}
int getMaxSpeed() {
return maxSpeed;
}
}
public class MethodAndConstructorReferenceTest {
public static void main(String[] args) {
// 測試通過Lambda創建車輛物件
ICarFactory f = (String name, int maxSpeed) -> new CarBean(name, maxSpeed);
ICarFactory f_3 = (o1, o2) -> new CarBean(o1, o2);
// 測試方法引用創建車輛物件
ICarFactory f_2 = CarBean::new;
// 創建GTR車輛
CarBean gtr = f.getCar("GTR", 320);
// 創建BMW M3車輛
CarBean m3 = f_2.getCar("BMW_M3", 300);
// 創建Toyota corolla cross車輛
CarBean corollaCross = f_3.getCar("Toyota_corolla cross", 200);
// 遍歷車輛列表,打印車輛信息
List.of(gtr, m3, corollaCross ).forEach(ICarFactory::printCarInfo);
// 輸出:
// Car Name:GTR / Max Speed:320
// Car Name:BMW_M3 / Max Speed:300
// Car Name:Toyota_corolla cross / Max Speed:200
}
}
總之,方法引用和構造器引用是Java 8引入的便利特性,使得代碼更加簡潔和可讀,尤其是在處理一些常見操作時。它們是函數式編程風格的重要組成部分,可以大大提高代碼的可維護性和可讀性。