現時点では、ボンネットの下で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アノテーションには、2つのアイデアがあります。まず、Enumクラスとそれから使用するString定数を指定します。しかし、これはもちろんタイプセーフではなく、RuntimeExceptionsにつながる可能性があります。 2番目は列挙型の値を直接指定することですが、これは機能していないようです。 –
btw私はJGoodiesでこのようなことをたくさんやっていましたが、これはJavaでもっと悲惨な時代でした。最大の問題は、彼が他のクラスのほとんどが拡張する "ベース"クラスを持っていることです。メソッドのシグネチャ(ベース、ベース、ベース)は、 "ベース"クラスが渡される特定のインスタンスでなければなりません。署名は、あなたがどのような特定のクラスについてインスタンスのものでなければならないかというヒントを与えません。バインディング部分は良いアイデアでしたが、彼は当時(数年前)それをうまく補完しなかったし、未完成でドイツ語でしか書かれていませんでした。 –