Tôi đang cố gắng tát hai hoặc nhiều chú thích cùng loại trên một phần tử, trong trường hợp này là một phương pháp. Dưới đây là các mã xấp xỉ mà tôi đang làm việc với:Nhiều chú thích cùng loại trên một phần tử?
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ề một chú thích trùng lặp:
[email protected]:~/work/daybreak$ javac Dupe.java Dupe.java:5: duplicate annotation
Có đơn giản là không thể lặp lại chú thích như thế này? Nói một cách dã man, không phải là hai trường hợp @Foo ở trên khác nhau do nội dung của chúng khác nhau không?
Nếu không thể nói ở trên, một số cách giải quyết tiềm ẩn là gì?
CẬP NHẬT: Tôi đã được yêu cầu mô tả trường hợp sử dụng của tôi. Đây rồi.
Tôi đang xây dựng cơ chế đường cú pháp để "lập bản đồ" POJO để lưu trữ các cửa hàng như MongoDB. Tôi muốn cho phép chỉ mục được chỉ định dưới dạng chú thích trên getters hoặc setters. Dưới đây là ví dụ giả tạo:
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 trường hợp Nhân viên theo 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 sử dụng phương pháp được chỉ định trong câu trả lời được chấp nhận. Mặc dù Hibernate làm điều này và nó không được coi là một hack, tôi nghĩ rằng nó vẫn có ý nghĩa để ít nhất cho phép có nhiều chú thích cùng loại trên một yếu tố duy nhất.
có một nỗ lực để có quy tắc trùng lặp này thư giãn để cho phép chương trình của bạn trong Java 7. Bạn có thể mô tả trường hợp sử dụng của bạn không? – notnoop
Tôi đã chỉnh sửa câu hỏi của mình với mô tả lý do tại sao tôi muốn làm điều này. Cảm ơn. –
Có thể thuận tiện trong CDI để cho phép đậu được cung cấp cho nhiều vòng loại. Ví dụ: tôi vừa thử sử dụng lại một bean ở hai nơi bằng cách đủ điều kiện "@Sản phẩm @PackageName (" test1 ") @PackageName (" test2 ")" –