images
07/10/2020 04:19 am

Tại sao cần dùng Java annotation?

Dù rất nhiều lập trình viên sử dụng Annotation trong Java nhưng lại ít người biết vai trò của Annotation là gì. Đơn giản, đây là một cách ‘đánh dấu’ biến, hàm hay lớp trong Java...

Dù rất nhiều lập trình viên sử dụng Annotation trong Java nhưng lại ít người biết vai trò của Annotation là gì. Đơn giản, đây là một cách ‘đánh dấu’ biến, hàm hay lớp trong Java để hỗ trợ chương trình Java trong lúc:

- Hướng dẫn compiler khi biên dịch.

- Generate ra code: Một số công cụ build có thể đọc annotation để sinh ra file class.

- Chạy code


Tại sao cần dùng Annotation? Chúng ta cùng nói về đặc tính của nó:

- Annotation chỉ đánh dấu và các thành phần của code (biến, hàm, class)

- Annotation được bắt đầu bằng: @, ví dụ @Override.

- Annotation có thể có hoặc không có thuộc tính đi kèm: @Override hoặc @Entity(name=”pupil”)


Chúng ta cùng đưa ra ví dụ để hiểu rõ hơn tại sao lại dùng Annotation nhé. Hãy điểm qua một số Annotation hay dùng: @Override, @Deprecated, @SuppressWarnings


Java annotation @Override


Ở đây ta sử dụng Annotation @Override để nói cho compiler biết ta đang muốn override hàm move của lớp Car thay cho hàm mặc định ở lớp Vehicle. Do đánh dấu Override nên compiler sẽ giúp ta kiểm tra cú pháp và nói cho ta biết hàm move(String name) không phải là một hàm Override hợp lệ và cảnh báo đỏ.


class Vehicle {

   public void move() {

       System.out.println("this vehicle is moving");

   }

}

public class Car extends Vehicle {

   @Override

   public void move() {

       System.out.println("The car is moving");

   }


   @Override //Compiler error here

   public void move(String name) {

       System.out.println("The car is moving");

   }

}


@Deprecated để báo hàm này không nên dùng


Ở đây, giả sử chúng ta có 1 phương thức cũ: start() và muốn thay thế bằng phương thức mới, chúng ta muốn cảnh báo các đoạn code khác đang sử dụng hàm này, chúng ta có thể thêm @Deprecated. Khi đó các đoạn code khác có sử dụng hàm này sẽ có thêm dấu gạch ngang giống như trong hàm main dưới. Điều này giúp bạn có thể lưu ý và thay thế bằng hàm mới (startEngine()). Lưu ý hàm này vẫn chạy chứ không phải sẽ bị dừng lại nhé.


public class Plane {

   @Deprecated

   public void start() {

       System.out.println("start the engine");

   }


   public void startEngine() {

       System.out.println("start the engine");

   }

}



@SuppressWarning


Một số cảnh báo của Java về việc check kiểu dữ liệu có thể khiến bạn thấy hơi phiền phức vì nó sinh ra các dòng cảnh báo không cần thiết, do đó bạn có thể thêm vào hàm có cảnh báo Annotation sau: @SuppressWarning. Lưu ý là phụ thuộc vào compiler mà bạn có thể nhìn thấy cảnh báo hay không nhé.


Ví dụ đoạn code sau:


public class SuppressWarningExample {

   List list;

   //@SuppressWarnings("unchecked")

   public void addToList(String name) {

       list.add(name);

   }

}


Mặc dù code hợp lệ nhưng bạn sẽ nhận cảnh báo sau:


SuppressWarningExample.java:9: warning: [unchecked] unchecked call to add(E) as a member of the raw type List

        list.add(name);

                 ^

where E is a type-variable: E extends Object declared in interface List

1 warning


Tuy nhiên nếu bạn thêm annotation @SuppressWarning thì sẽ không gặp cảnh báo này nữa


Tự tạo Annotation cho riêng mình


Trong phần này bạn sẽ thử tự tạo Annotation cho riêng mình để hiểu phần nào cách ứng dụng Annotation trong Java, đặc biệt là hiểu được phần nào cách làm việc của các Framework, tiêu biểu như Spring.


Ta sẽ tạo ra annotation Component, sau đó tìm xem có class nào được đánh dấu Annotation này.


@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.TYPE)

public @interface Component {

}


Ở đây là phải sử dụng từ khoá @interface để khai báo annotation

Retention: nhận giá trị RUNTIME có nghĩa là annotation này tồn tại ở thời điểm chạy chương trình

@Target: nhận giá trị là ElementType.TYPE có nghĩa là annotation này có thể khai báo cho các kiểu khác nhau gồm hàm, class hay biến.


Mời các bạn đọc thêm bài viết về Java JSON.


- Tech Zone -

Thư giãn chút nào!!!

Bài viết liên quan