Ngoài ra, chúng có phải là duy nhất cho Java, có tương đương với C ++ không?
Không, nhưng VB và C # có các thuộc tính giống nhau.
Công dụng của chúng khá đa dạng. Một ví dụ điển hình của Java, @Override
không ảnh hưởng đến mã nhưng nó có thể được trình biên dịch sử dụng để tạo cảnh báo (hoặc lỗi) nếu phương thức được trang trí không thực sự ghi đè phương thức khác. Tương tự, các phương pháp có thể được đánh dấu là lỗi thời.
Sau đó, có sự phản chiếu. Khi bạn phản ánh một loại lớp trong mã của mình, bạn có thể truy cập các thuộc tính và hành động theo thông tin được tìm thấy ở đó. Tôi không biết bất kỳ ví dụ nào trong Java nhưng trong .NET, điều này được trình biên dịch sử dụng để tạo (de) thông tin tuần tự hóa cho các lớp, xác định bố cục bộ nhớ của cấu trúc và khai báo nhập hàm từ các thư viện kế thừa (trong số những thứ khác). Họ cũng kiểm soát cách hoạt động của trình thiết kế biểu mẫu IDE.
/ EDIT: Các thuộc tính trên các lớp có thể so sánh với các giao diện thẻ (như Serializable trong Java). Tuy nhiên, hướng dẫn mã hóa .NET nói rằng không sử dụng giao diện thẻ. Ngoài ra, chúng chỉ hoạt động ở cấp độ lớp học, không phải ở cấp độ phương pháp.