Gibt es eine Möglichkeit, zu erklären, eine annotation-Attribut für *alle* enum?

Im moment bin ich die Entwicklung eines annotation-basierten binding-framework für Java Swing verwendet JGoodies Binding unter der Haube. Leider bin ich stecken mit einer Anmerkung für einen JRadioButton-Bindung.
Was ich tun möchte, ist eine Eigenschaft angeben, die-name eines Modells, das hat einen besonderen Wert (enum). Der radio-button ausgewählt werden, wenn diese Eigenschaft mit einem bestimmten Wert. Jetzt möchte ich den Wert angeben, in den Anmerkungen wie diese:

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

@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.SECOND)
JRadioButton secondButton

Aber ich weiß nicht, wie zu erklären, dass die annotation zu erlauben, die oben und alle anderen enum auch. Meine erste Vermutung war, aber ich habe gelernt, dass die annotation Attribute können nicht generisch sein:

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

}

Irgendwelche Ideen wie man dieses Problem lösen?

  • Die RadioButtonBinding annotation aufgeführt hier beinhaltet zwei Ideen: Die erste ist die Angabe der Enum-Klasse und die String-Konstante verwenden aus. Aber das ist nicht typesafe natürlich und kann dazu führen, RuntimeExceptions. Das zweite ist, geben Sie den Wert von enum direkt, aber das scheint nicht zu funktionieren.
  • btw ich habe eine Menge von dieser Art von Sachen mit JGoodies, ein eher jämmerliches mal hatte, habe ich in Java. Das größte problem ist, dass er eine "Basis" - Klasse, die die meisten seiner anderen Klassen erweitern und so seine Methoden haben die Signatur wie Methode(Basis,base,base), wo die "Basis" - Klasse übergeben werden muss eine bestimmte Instanz, sondern die Signatur gibt Sie keinen Hinweis auf genau das, was bestimmte Klasse muss es eine Instanz. Die Bindungen Teil eine gute Idee war, aber er wusste nicht, suport es auch an der Zeit (vor Jahren) und es war unvollendet und dokumentiert lediglich in Deutsch.
Schreibe einen Kommentar