Method reference là một khái niệm mới của Java từ phiên bản 8. Nó đi kèm với Lambda Expression, giúp cho việc viết code sử dụng Lambda Expression dù đã gọn nhưng vẫn còn gọn hơn trong một số trường hợp. Trong bài viết này, chúng ta hãy cùng tìm hiểu thêm về method reference trong Java các bạn nhé!
OK, bắt đầu nào các bạn …
Điều đầu tiên, các bạn cần phải biết là method reference là cách code ngắn gọn hơn cho những Lambda Expression mà trong phần body của nó chỉ có duy nhất một phương thức được gọi.
Cú pháp chung của method reference là:
1 |
Object::methodName |
Trong đó Object là tên class có chứa phương thức đang được gọi (methodName) trong phần body của Lambda Expression.
Ví dụ giả sử mình có một Lambda Expression như sau:
1 |
SayHello sayHello = s -> System.out.println(s); |
Trong Lambda Expression này, phần body chúng ta chỉ gọi phương thức println() của đối tượng System.out (PrintStream). Do đó, chúng ta có thể viết lại đoạn code trên sử dụng method reference như sau:
1 |
System.out::println; |
Kết quả:
Ở đây, chúng ta cho tất cả 3 loại method reference.
- Loại thứ nhất là method reference cho một phương thức static:
Giả sử mình có Lambda Expression sau:
1 |
(args) -> ClassName.staticMethod(args) |
thì khi chuyển qua method reference, mình có thể viết lại như sau:
1 |
ClassName::staticMethod |
- Loại thứ hai là method reference cho một instance method của một đối tượng với kiểu dữ liệu cụ thể.
Loại này chúng ta có thể áp dụng cho những Lambda Expression có dạng giống giống như sau:
1 |
(obj, args) -> obj.instanceMethod(args) |
trong đó, obj là instance của một object nào đó và obj này gọi một instance method có sử dụng các args còn lại trong biểu thức Lambda Expression.
Ví dụ mình có Lambda Expression như sau:
(String s, int i) -> s.substring(i);
Trong biểu thức này, chúng ta có s là một argument với kiểu dữ liệu String và trong phần body, chúng ta sử dụng s để gọi một phương thức có sử dụng argument i. Trong trường hợp này, chúng ta có thể sử dụng method reference như sau:
1 |
String::substring |
- Loại cuối cùng là method reference cho một existing object.
Với loại này, chúng ta apply cho những Lambda Expression có dạng như sau:
1 |
(args) -> obj.instanceMethod(args); |
Với dạng này, obj là môt instance của một đối tượng đã được khai báo ở đâu đó, obj này gọi một phương thức có sử dụng argument trong biểu thức Lambda Expression.
Trong ví dụ ở đầu bài viết:
1 |
s -> System.out.println(s); |
println() là một instance method của class PrintStream. Do đó chúng ta có thể code gọn lại như sau:
1 |
System.out::println |
ilovebka56
Viết về optional trong java 8 đi anh ơi
Khanh Nguyen
Anh viết rồi mà https://huongdanjava.com/vi/gioi-thieu-ve-doi-tuong-optional-trong-java.html 🙂