Tôi muốn sử dụng Annotation ở dạng biên dịch an toàn.Enums and Annotations
Để chuyển giá trị() vào Chú thích, tôi muốn sử dụng biểu diễn Chuỗi của một enum.
Có cách nào để sử dụng @A với giá trị từ enum E không?
public class T {
public enum E {
a,b;
}
// C1: i want this, but it won't compile
@A(E.a)
void bar() {
// C2: no chance, it won't compile
@A(E.a.toString())
void bar2() {
}
// C3: this is ok
@A("a"+"b")
void bar3() {
}
// C4: is constant like C3, is'nt it ?
@A(""+E.a)
void bar4() {
}
}
@interface A {
String value();
}
Cập nhật
tôi cần những kiểu String trong @A.
Vấn đề là tôi có thể làm điều này
@A("" + 1)
void foo() {
}
Nhưng ở đây những tuyên bố biên dịch "giá trị thuộc tính phải được liên tục". Is'nt E.a không đổi?
@A("" + E.a)
void foo() {
}
"E có phải là một enum không? Bạn có thể thử: ..." Tôi nghĩ bạn có thể làm điều tương tự với enums. Bạn sẽ phải truyền trong String mà bạn muốn trong hàm tạo cho 'E', sau đó gán nó cho' chuỗi cuối cùng công khai strRepresentation'. Và sau đó chỉ cần làm '@A (E.strRepresentation)' – MatrixFrog
@MatrixFrog Thậm chí nếu tôi đặt 'chuỗi cuối cùng công khai strRepresentation =" foo ";' trên E, tôi nhận được 'giá trị thuộc tính phải là hằng số' – leedm777