지금은 후드 아래에서 JGoodies Binding을 사용하는 Java Swing 용 어노테이션 기반 바인딩 프레임 워크를 개발 중입니다. 불행히도 JRadioButton 바인딩에 대한 주석이 붙어 있습니다. 원하는 것은 특별한 값 (enum)을 가진 모델의 프로퍼티 이름을 지정하는 것입니다. 이 속성에 특정 값이있는 경우 라디오 버튼을 선택해야합니다. 지금은이 같은 주석의 값을 지정하려면 :* any * enum에 대한 주석 특성을 선언 할 수있는 방법이 있습니까?
@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.FIRST)
JRadioButton firstButton
@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.SECOND)
JRadioButton secondButton
그러나, 나도 어떤 다른 열거 위 및 을 허용하는 주석을 선언하는 방법을 모르겠어요. 내 첫번째 추측이이었다, 그러나 나는 주석 속성은 일반적인 수 없다는 것을 알게 :
@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();
}
모든 아이디어를 어떻게 이것을 해결하기 위해?
여기에 나열된 RadioButtonBinding 주석에는 두 가지 아이디어가 포함되어 있습니다. 첫 번째 것은 Enum 클래스와 그에서 사용할 문자열 상수를 지정하는 것입니다. 하지만 이것은 타입 안전하지 않으며 RuntimeExceptions로 이어질 수 있습니다. 두 번째는 열거 형 값을 직접 지정하는 것이지만 작동하지 않는 것 같습니다. –
btw 나는 JGoodies와 함께 이런 종류의 것들을 많이했는데, 나는 자바에서 더 비참한시기였다. 가장 큰 문제는 다른 클래스의 대부분이 확장하는 "기본"클래스를 가지므로 그의 메소드는 메서드 (base, base, base)와 같은 서명을 가지며 "기본"클래스가 전달 된 특정 인스턴스 여야하지만 서명은 특정 클래스에 대한 힌트를 제공하지 않습니다. 바인딩 부분은 좋은 생각 이었지만 시간 (몇 년 전)에 잘 팔리지 않았고 미완성이고 독일어로만 문서화되었습니다. –