Tôi đang cố gắng bổ sung hai hoặc nhiều chú thích cùng loại vào một phần tử, trong trường hợp này là một phương thức. Đây là mã gần đúng mà tôi đang làm việc:
public class Dupe {
public @interface Foo {
String bar();
}
@Foo(bar="one")
@Foo(bar="two")
public void haha() {}
}
Khi biên dịch ở trên, javac phàn nàn về chú thích trùng lặp:
max @ upsight: ~ / work / daybreak $ javac Dupe.java Dupe.java:5: trùng lặp chú thích
Đơn giản là không thể lặp lại các chú thích như thế này? Nói một cách khoa học, không phải hai trường hợp @Foo ở trên khác nhau do nội dung của chúng khác nhau sao?
Nếu điều trên không thể thực hiện được, thì một số cách giải quyết tiềm năng là gì?
CẬP NHẬT: Tôi đã được yêu cầu mô tả trường hợp sử dụng của mình. Đây rồi.
Tôi đang xây dựng một cơ chế sai cú pháp để "ánh xạ" POJO đến các kho lưu trữ tài liệu như MongoDB. Tôi muốn cho phép các chỉ mục được chỉ định dưới dạng chú thích trên getters hoặc setters. Đây là một ví dụ giả định:
public class Employee {
private List<Project> projects;
@Index(expr = "project.client_id")
@Index(expr = "project.start_date")
public List<Project> getProjects() { return projects; }
}
Rõ ràng, tôi muốn có thể nhanh chóng tìm thấy các phiên bản của Nhân viên bằng các thuộc tính khác nhau của Dự án. Tôi có thể chỉ định @Index hai lần với các giá trị expr () khác nhau hoặc thực hiện phương pháp được chỉ định trong câu trả lời được chấp nhận. Mặc dù Hibernate thực hiện điều này và nó không bị coi là hack, nhưng tôi nghĩ rằng nó vẫn hợp lý khi ít nhất cho phép có nhiều chú thích cùng loại trên một phần tử duy nhất.