Deprecated,... Nó là gì? Có tạo ảnh hưởng đến chương trình? Bỏ đi có sao không?Trong bài viết này, chúng ta sẽ cùng tìm đọc về annotaion, mục đích sử dụng, những annotation được định nghĩa sẵn và cách để đem tới một annotation.

Bạn đang xem: Annotation là gì

Annotation là gì?

Annotation trong Java là một thẻ tượng trưng đến metadata, nó thường đi kèm với lớp, interface, phương thức hoặc các trường để chỉ ra một số báo cáo bổ sung có thể được sử dụng bởi trình biên dịch Java và JVM.Annotation sử dụng để cung cấp báo cáo bổ sung, bởi đó nó là một tùy chọn ráng thế mang lại XML và marker interface.Đối với quý khách hàng nào không biết marker interface là gì thì marker interface giỏi còn được phát âm là Tagging interface là một interface ko có bất kỳ phương thơm thức và thuộc tính nào phía bên trong nó. Nó cung cấp công bố runtime type về object, vì vậy compiler và JVM có thêm biết tin về đối tượng để thực hiện một số hoạt động hữu ích.Một số marker có thể kể đến nhỏng Serializable, Cloneable, EventListener, RandomAccess,...Đặc điểm của annotation:Annotation được khởi đầu với
Annotation ko làm chũm đổi hoạt động của một chương trình đã compileAnnotation giúp liên kết công bố với các phần tử của cmùi hương trình (biến instance, constructor, method và class)Annotation không phải là chú thích thuần túy vì chúng có thể cố gắng đổi cách trình biên dịch xử lý chương thơm trìnhAnnotation được sử dụng mang đến mục đích:Chỉ dẫn mang đến trình biên dịchChỉ dẫn trong thời điểm biên dịchChỉ dẫn trong thời gian chạy

Các loại annotation

Có 5 loại annotation trong java:

1. Marker Annotation

Nhằm mục đích để đánh dấu một khai báo. Các chú thích đánh dấu không chứa bất kỳ thành viên nào và không chứa bất kỳ dữ liệu nào. Có thể kể đến
TestAnnotation()

2. Single value Annotation

Annotaion này chỉ chứa một thành viên và đến phép dạng viết tắt xác định quý giá thành viên. khi chúng ta áp dụng chú thích này, chúng ta chỉ là sai khiến quý giá mang lại thành viên mà không cần ra lệnh thương hiệu thành viên. Tuy nhiên để sử dụng cách viết tắt này phải có một quý giá cho tên của thành viênVí dụ:
TestAnnotation(“testing”);

3. Full Annotation

Các annotation này bao hàm nhiều thành viên dữ liệu, tên, giá trị, pairVí dụ:
TestAnnotation(author = "Eri", version = "1.0")

4. Type Annotation

Nhũng annotation này được sử dụng cho bất kỳ nơi nào sử dụng type. Ví dụ, chúng ta có thể chú thích kiểu trả về của một phương thơm thức. Chúng được knhị báo với annotation
Target(ElementType.FIELD)

5. Repeating Annotation

Repeating Annotation vào Java là chú giải được áp dụng những lần cho 1 mục. Các repeating annotation nên được ghi chú bằng annotation
Repeatable, gồm trong gói java.lang.annotation. Giá trị của annotation này chỉ định loại vùng cất mang lại repeating annotation. Do đó, để tạo nên một repeating annotation, họ đề xuất chế tạo ra annotation vùng đựng kế tiếp hướng đẫn một số loại annotation làm cho đối số đến annotation
Repeatable(MyRepeatedAnnos.class)imageGiờ hãy cùng tìm đọc đưa ra tiết các Annotation có sẵn

Built-in Java Annotation


Deprecated là một marker annotation, nó chỉ ra rằng một class hoặc method đã bị lỗi thời và tránh việc sử dụng nữa.Bạn có thể tìm thấy nó vào một số class và phương thức có sẵn vào Java ví dụ như vào class Date nằm trong package java.util, có thể tìm thấy một số constructor, method bị đánh dấu
DeprecatedXem ví dụ dưới đây:public class Person private String name; private int age; private String address; public Person(String name, int age, String address) this.name = name; this.age = age; this.address = address;
Deprecated public void display() System.out.printf("Tôi tên là %s, năm nay tôi %d tuổi, tôi đến từ %s", name, age, address); imageDo bị đánh dấu
Override là một marker annotation, nó được sử dụng đến các phương thơm thức ghi đè của phương thơm thức vào class cha. Nếu pmùi hương thức này ko hợp lệ với một pmùi hương thức vào class cha, trình biên dịch sẽ báo lỗi.Hãy cùng coi ví dụ dưới đâypublic class Person private String name; private int age; private String address; public Person(String name, int age, String address) this.name = name; this.age = age; this.address = address; public void display() System.out.printf("Tôi tên là %s, năm nay tôi %d tuổi, tôi đến từ %s", name, age, address); public class Student extends Person private String school; public Student(String name, int age, String address, String school) super(name, age, address); this.school = school;
Override public void display() super.display(); System.out.printf(". Tôi sẽ học tại %s", school); public class Main public static void main(String<> args) Person person = new Student("Chris", 34, "American", "tekkenbasara.mobi"); person.display(); Kết quả trả về:Tôi tên là Chris, năm nay tôi 34 tuổi, tôi đến từ American. Tôi đang học tại tekkenbasara.mobiTrong ví dụ trên mình có class Student kế thừa Person và override phương thơm thức display(). Lúc này xuất hiện annotation
Override bên trên phương thức display() tại lớp bé.Annotation này ko bắt buộc phải ghi chú bên trên pmùi hương thức display(), mặc dù, Lúc thực hiện ghi đè phương thơm thức ta đề xuất sử dụng annotation này để đánh dấu phương thơm thức. Việc này giúp code dễ phát âm và dễ bảo trì.Hãy thử đổi tên pmùi hương thức của lớp phụ thân và xem kết quả nhé.


SuppressWarnings

Annotation này được sử dụng để hướng dẫn trình biên dịch bỏ qua những chình ảnh báo cụ thểJava phân tách cảnh bảo ra thành 2 dạng: deprecated và uncheckedCùng coi ví dụ dưới đây:imageimagePmùi hương thức getDate() của class Date đang bị chú thích
Deprecated, nên lúc mình đọc tới phương thức này trong main(), xuất hiện chình họa báo.Giờ mình sẽ áp dụng annotation
SuppressWarningsimageCó thể thấy các cảnh báo đã bị loại bỏ khi mình sử dụng annotation
SuppressWarningsTuy nhiên người mua sẽ thấy có các tham số được truyền vào bên trong annotation. Các tmê man số này có ý nghĩa:deprecation nhằm thông báo trình biên dịch ko cảnh báo câu hỏi thực hiện cách làm tất cả áp dụng
Deprecation.unchecked nhằm thông tin trình biên dịch không cảnh báo vấn đề sử một ép mẫu mã ko an toàn.rawtypes để thông báo trình biên dịch không lưu ý vấn đề khai báo kiểu dáng tài liệu không tường minh.

Xem thêm: Nghĩa Của Từ Bevel Là Gì - Nghĩa Của Từ Bevel, Từ Bevel Là Gì


Documented

Annotation này chỉ ra rằng annotation mới đề xuất được khái quát vào tài liệu Java được làm nên bởi các công cụ tạo tài liệu Java


Target

Sử dụng để chú thích cho annotation khác và annotation đó sẽ được sử dụng vào phạm vi nàoimage


Retention dùng để chú thích mức độ mãi sau của một annotation nào đó.Có 3 mức nhận thức trường thọ được chú thích:RetentionPolicy.SOURCE: Tồn tại bên trên code mối cung cấp, cùng không được cỗ dịch (compiler) nhận ra.RetentionPolicy.CLASS: Mức mãi sau được cỗ dịch nhận ra, tuy vậy ko được nhận ra bởi vì thiết bị ảo tại thời khắc chạy (Runtime)RetentionPolicy.RUNTIME: Mức tồn tại lớn nhất, được cỗ dịch (compiler) nhận biết, với đồ vật ảo thời điểm chạy cũng nhận biết sự mãi sau của nó.


Inherited

Annotation cho là loại chú giải rất có thể được kế thừa từ lớp phụ thân (khoác định là false). Khi người tiêu dùng tróc nã vấn hình trạng annotation của lớp bé và lớp con không tồn tại annotation cho loại này thì lớp phụ thân của lớp được tróc nã vấn cho các loại chú giải sẽ được Hotline. Annotation này chỉ vận dụng cho các knhì báo lớp.

Custom annotation

Mình sẽ tạo 3 custom annotation cùng với mục tiêu tuần từ hóa một đối tượng người tiêu dùng thành một chuỗi JSON

1. Sử dụng mang lại phạm vi Class


interface MyAnnotationClass

2. Sử dụng mang lại phạm vi method

Để tuần tự hóa một đối tượng thành một chuỗi JSON, cần phải thực thi một số phương thơm thcuws để khởi tạo một đối tượng. Do đó, mình sẽ tạo annotation để đánh dấu phương thơm thức này.
interface MyAnnotationMethod

3. Sử dụng mang lại phạm vi field

Annotation này để đánh dấu các trường sẽ gửi vào JSON đã tạo
interface MyAnnotationField public String key() mặc định "";

Sử dụng các annotation vừa tạo

public class User
DBField(name = "id", isPrimaryKey = true, type = Long.class) private long id;
DBField(name = "name", type = String.class) private String name;
DBField(name = "email", type = String.class) private String email;
DBField(name = "created", type = LocalDate.class) private LocalDate created; public User(long id, String name, String tin nhắn, LocalDate created) this.id = id; this.name = name; this.tin nhắn = email; this.created = created; public long getId() return id; public void setId(long id) this.id = id; public String getName() return name; public void setName(String name) this.name = name; public String getEmail() return email; public void setEmail(String email) this.email = email; public LocalDate getCreated() return created; public void setCreated(LocalDate created) this.created = created; public class Main public static void main(String<> args) throws IllegalAccessException User user = new User(1, "John", "john
email.com", LocalDate.now()); for(Field field : user.getClass().getDeclaredFields()) DBField dbField = field.getAnnotation(DBField.class); System.out.println("field name: " + dbField.name()); field.setAccessible(true); Object value = field.get(user); System.out.println("field value: " + value); System.out.println("field type: " + dbField.type()); System.out.println("is primary: " + dbField.isPrimaryKey()); System.out.println(); Kết quả trả về:field name: idfield value: 1field type: class java.lang.Longis primary: truefield name: namefield value: Johnfield type: class java.lang.Stringis primary: falsefield name: emailfield value: john
Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *