Gibt es eine Möglichkeit, ein Annotation-Attribut für * eine * Aufzählung zu deklarieren?

Momentan entwickle ich ein annotationsbasiertes Binding-Framework für Java Swing, das verwendet wirdJGoodies Bindung unter der Haube. Leider stecke ich bei einer Anmerkung für eine JRadioButton-Bindung fest. Ich möchte einen Eigenschaftsnamen eines Modells angeben, das einen speziellen Wert (enum) enthält. Das Optionsfeld ist auszuwählen, wenn diese Eigenschaft einen bestimmten Wert hat. Jetzt möchte ich den Wert in der Annotation wie folgt angeben:

<code>@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.FIRST)
JRadioButton firstButton

@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.SECOND)
JRadioButton secondButton
</code>

Ich weiß jedoch nicht, wie ich die Annotation deklarieren soll, um die obigen undirgendein andere Aufzählung auch. Meine erste Vermutung war dies, aber ich habe gelernt, dass Anmerkungsattribute nicht generisch sein können:

<code>@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();

}
</code>

Irgendwelche Ideen, wie man das löst?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage