Skip to main content

Java 8 - Method reference

Phương thức tham chiếu cung cấp các cú pháp (syntax) hữu ích để truy cập trực tiếp tới các phương thức hoặc hàm dựng đã tồn tại của các lớp hoặc đối tượng trong Java. Với sự kết hợp của Lambda expression, phương thức tham chiếu làm cho cấu trúc ngôn ngữ trông nhỏ gọn và súc tích.

Ví dụ: Car class với các định nghĩa phương thức khác nhau

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( "Collided " + car.toString() );
	}
	
	public void follow( final Car another ) {
		System.out.println( "Following the " + another.toString() );
	}
	
	public void repair() {   
		System.out.println( "Repaired " + this.toString() );
	}
}

Giải thích:

1. Tham chiếu hàm dựng

Loại thứ nhất của phương thức tham chiếu là hàm dựng tham chiếu với cú pháp Class::new hoặc cách tổng quát, Class<T>::new

final Car car = Car.create(Car::new);
final List<Car> cars = Arrays.asList(car);

Chú ý rằng, hàm dựng này không có đối

2. Tham chiếu phương thức static

Loại thứ hai là tham chiếu tới phương thức static với cú pháp Class::staticMethod

cars.forEach(Car::collide);

Chú ý rằng, phương thức này chấp nhận chính xác tham số của Car

3. Tham chiếu phương thức instance của đối tượng tùy ý

Loại thức ba là tham chiếu tới phương thức instance của đối tượng tùy ý của loại cụ thể với cú pháp Class::method

cars.forEach(Car::repair);

Chú ý rằng, phương thức này có thể chấp nhận không có đối số

4. Tham chiếu phương thức instance của lớp instance

Loại thứ tư là tham chiếu tới phương thức instance của lớp instance cụ thể với cú pháp instance::method

final Car police = Car.create(Car::new);
cars.forEach(police::follow);

Chú ý rằng, phương thức này chấp nhận chính xác tham số của Car

Kết quả:

Collided vn.laptrinh.Car@36baf30c
Repaired vn.laptrinh.Car@36baf30c
Following the vn.laptrinh.Car@36baf30c