函数式编程 - 方法引用
方法引用有助于通过方法名称指向方法。方法引用使用"::"符号描述。方法引用可用于指向以下类型的方法 −
静态方法 - 可以使用 ClassName::Method 名称表示法引用静态方法。
//方法引用 - 静态方式 Factory vehicle_factory_static = VehicleFactory::prepareVehicleInStaticMode;
实例方法 - 可以使用 Object::Method 名称表示法引用实例方法。
//方法引用 - 实例方式 Factory vehicle_factory_instance = new VehicleFactory()::prepareVehicle;
以下示例展示了方法引用在 Java 8 及更高版本中的工作方式。
interface Factory { Vehicle prepare(String make, String model, int year); } class Vehicle { private String make; private String model; private int year; Vehicle(String make, String model, int year){ this.make = make; this.model = model; this.year = year; } public String toString(){ return "Vehicle[" + make +", " + model + ", " + year+ "]"; } } class VehicleFactory { static Vehicle prepareVehicleInStaticMode(String make, String model, int year){ return new Vehicle(make, model, year); } Vehicle prepareVehicle(String make, String model, int year){ return new Vehicle(make, model, year); } } public class FunctionTester { public static void main(String[] args) { //Method Reference - Static way Factory vehicle_factory_static = VehicleFactory::prepareVehicleInStaticMode; Vehicle carHyundai = vehicle_factory_static.prepare("Hyundai", "Verna", 2018); System.out.println(carHyundai); //Method Reference - Instance way Factory vehicle_factory_instance = new VehicleFactory()::prepareVehicle; Vehicle carTata = vehicle_factory_instance.prepare("Tata", "Harrier", 2019); System.out.println(carTata); } }
输出
Vehicle[Hyundai, Verna, 2018] Vehicle[Tata, Harrier, 2019]