Local Variable Type Inference trong Java

Mình đã giới thiệu với các bạn về Type Inference trong Java ở bài viết trước. Nếu các bạn đã đọc qua thì có lẽ sẽ biết đây là tính 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 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. Từ Java 10 trở đi, Java giới thiệu từ khoá var áp dụng Type Inference giúp chúng ta không cần phải khai báo tường minh kiểu dữ liệu các biến local trong một phương thức hoặc một code block nữa.

Ví dụ như từ Java 9 trở về trước, khi khai báo một biến kiểu List của một List các đối tượng String, chúng ta sẽ khai báo như sau:

Kết quả:

Local Variable Type Inference trong Java

Nhưng từ Java 10 trở đi, các bạn không cần phải khai báo kiểu dữ liệu ở phía trước của biến names nữa, chỉ cần khai báo với từ khoá var là được.

Kết quả vẫn như vậy:

Local Variable Type Inference trong Java

Việc xác định kiểu dữ liệu của một biến local sẽ dựa vào đoạn code mà chúng ta khai báo. Trong ví dụ trên, bởi vì ở phía sau chúng ta đã khai báo new một đối tượng ArrayList rồi nên Java Compiler sẽ hiểu đây là biến kiểu List.

Nếu trước đó đoạn code khởi tạo biến names được khai báo sử dụng sử dụng diamond operator (cũng là một dạng Type Inference) từ Java 7:

Local Variable Type Inference trong Java

thì các bạn sẽ không sử dụng từ khoá var ở đây được. Bởi vì lúc này, Java Compiler chỉ có thể Type Inference biến names chúng ta qua thành kiểu dữ liệu Object, mà với đối tượng Object thì chúng ta ko thể sử dụng các phương thức của đối tượng ArrayList được.

Như mình nói, chúng ta cũng có thể sử dụng từ khoá var trong code block như sau:

Kết quả:

Local Variable Type Inference trong Java

Hoặc:

Kết quả:

Local Variable Type Inference trong Java

Các bạn nên hiểu là: mặc dù chúng ta có thể sử dụng từ khoá var khi viết code nhưng khi compile những đoạn code này thì kiểu dữ liệu sẽ được compile chính xác kiểu dữ liệu mà chúng ta muốn. Do đó, khi các bạn đã khai báo với kiểu dữ liệu này thì không thể assign nó vào kiểu dữ liệu khác.

Ví dụ như:

Local Variable Type Inference trong Java

 

Add Comment