Hiện tại tôi đang phát triển một khung công tác ràng buộc dựa trên chú thích cho Java Swing sử dụng JGoodies Binding dưới mui xe. Thật không may tôi bị mắc kẹt với một chú thích cho một ràng buộc JRadioButton. Điều tôi muốn làm là chỉ định tên thuộc tính của một mô hình có giá trị đặc biệt (enum). Nút radio sẽ được chọn nếu thuộc tính này có giá trị cụ thể. Bây giờ tôi muốn chỉ định các giá trị trong các chú thích như thế này:Có cách nào để khai báo thuộc tính chú thích cho * any * enum không?
@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.FIRST)
JRadioButton firstButton
@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.SECOND)
JRadioButton secondButton
Tuy nhiên, tôi không biết làm thế nào để khai báo các chú thích để cho phép các bên trên và bất kỳ enum khác nữa. Dự đoán đầu tiên của tôi là điều này, nhưng tôi đã biết rằng các thuộc tính chú thích không thể là chung chung:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface RadioButtonBinding {
/** The model-property to which the selected value is bound */
String property();
// Idea 1: Specifying the enum class and the enum constant as String - works but is not typesafe
Class<? extends Enum<?>> enumClass();
String enumConstantName();
// Idea 2: Directly specifying the enum constant - gives a compile-time error
<T extends Enum<T>> T enumValue();
}
Bất kỳ ý tưởng nào để giải quyết vấn đề này?
Chú thích RadioButtonBinding được liệt kê ở đây bao gồm hai ý tưởng: Đầu tiên là chỉ định lớp Enum và hằng số Chuỗi để sử dụng từ nó. Nhưng đây không phải là loại an toàn của khóa học và có thể dẫn đến RuntimeExceptions. Thứ hai là xác định giá trị của một enum trực tiếp, nhưng điều này dường như không hoạt động. –
btw Tôi đã làm rất nhiều loại công cụ này với JGoodies, một trong những lần đau khổ hơn tôi đã có trong Java. Vấn đề lớn nhất là anh ta có một lớp "cơ sở" mà hầu hết các lớp khác của anh ta mở rộng và vì vậy các phương thức của anh ta có chữ ký như phương thức (base, base, base), trong đó lớp "base" được truyền vào phải là một instance cụ thể nhưng chữ ký cho bạn không có gợi ý về chỉ là những gì lớp cụ thể nó phải là một thể hiện của. Phần ràng buộc là một ý tưởng hay nhưng anh ta không ủng hộ nó vào thời điểm đó (nhiều năm trước) và nó chưa hoàn thành và chỉ được viết bằng tiếng Đức. –