В настоящее время я разрабатываю основанную на аннотациях связующую среду для Java Swing, которая использует JGoodies Binding под капотом. К сожалению, я застрял с аннотацией для связывания JRadioButton.
То, что я хочу сделать, это указать имя свойства модели, которая содержит специальное значение (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();
}
Есть идеи, как это решить?