Type Inference trong Java là một khả năng của Java Compiler dựa trên cách khai báo, cách gọi để xác định được kiểu dữ liệu của các tham số mà không cần phải khai báo một cách tường minh, giảm thiểu code dư thừa.
Để các bạn hiểu rõ hơn, mình xin lấy một ví dụ như sau.
Giả sử các bạn đang làm việc với đối tượng List, chúng ta thường khởi tạo nó như sau:
1 |
List<String> text = new ArrayList<String>(); |
Như các bạn thấy, chúng ta phải khai báo cùng một kiểu dữ liệu ở bên trái và bên phải của biểu thức trên. Tại sao chúng ta lại phải lặp lại 2 lần như thế? Sao không khai báo một lần còn cái còn lại thì để cho Java Compiler tự hiểu?
Đây chính là nguyên nhân mà Type Inference được giới thiệu. Với Type Inference, chúng ta viết như sau:
1 |
List<String> text = new ArrayList<>(); |
Các bạn thấy đó, sử dụng Type Inference chúng ta có thể loại bỏ bớt một “<String>”.
Để áp dụng Type Inference với ví dụ trên, các bạn chỉ cần thay thế phần kiểu dữ liệu bên phải bằng một ký tự mà tiếng Anh gọi là Diamond (“<>”).
Ví dụ thứ hai, đó là mình xin nói thêm về Lambda Expression.
Giả sử mình có interface như sau:
1 2 3 4 5 6 |
package com.huongdanjava.javaexample; public interface Calculator { int add(int a, int b); } |
Bây giờ mình sẽ sử dụng interface này trong ứng dụng của mình với Lambda Expression như sau:
1 2 3 4 5 6 7 8 9 |
package com.huongdanjava.javaexample; public class Example { public static void main(String[] args) { Calculator calculator = (a, b) -> a + b; System.out.println(calculator.add(2, 3)); } } |
Kết quả:
Rõ ràng, như các bạn thấy, mặc dù mình không sử dụng return statement trong Lambda Expression nhưng Java Compiler, dựa vào cách chúng ta khai báo interface và phương thức trong interface này, vẫn tự động hiểu là ở đây sẽ có một giá trị trả về khi kết thúc phần body trong Lambda Expression.