Ben başlık altında JGoodies Binding kullanan Java Swing için bir açıklama tabanlı bağlama-çerçeve geliştiriyorum. Ne yazık ki bir JRadioButton-binding için bir ek açıklama ile sıkışmış. Yapmak istediğim, özel bir değeri (enum) tutan bir modelin özellik adını belirtmek. Bu özellik belirli bir değere sahipse, radyo düğmesi seçilmelidir. Şimdi böyle ek açıklamada değerini belirtmek istiyorum:* Herhangi bir * enum için bir açıklama özelliği bildirmenin bir yolu var mı? Şu anda
@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.FIRST)
JRadioButton firstButton
@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.SECOND)
JRadioButton secondButton
Ancak, ben de herhangi diğer enum yukarıda ve izin şerh ilan etmek nasıl bilmiyorum. Benim ilk tahminim bu, ama açıklama nitelikleri jenerik olamayacağını öğrendik:
@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();
}
Herhangi fikirleri nasıl bu çözmek için?
burada listelenen RadioButtonBinding açıklama iki fikri içerir: Birincisi Enum sınıf ve ondan kullanılacak sabit dize belirtmektir. Ancak bu elbette güvenli değildir ve RuntimeExceptions'a yol açabilir. İkincisi, bir enum değerini doğrudan belirtmektir, ancak bu işe yaramaz. –
btw JGoodies ile bu türden pek çok şey yaptım, Java'da yaşadığım en sefil zamanlardan biri. En büyük sorun o geçirilen "taban" sınıfı, belirli bir örneği ama olmalı onun diğer sınıfların çoğu genişletmek ve bu yüzden onun yöntemleri yöntemi (baz, baz, baz) gibi imzaya sahip bir "temel" sınıfı, sahip olmasıdır imza, hangi sınıfın bir örneği olması gerektiği konusunda hiçbir ipucu vermez. Bağlayıcılar bölümü iyi bir fikirdi, ama o zamanlar (yıllar önce) iyi bir şekilde desteklemedi ve tamamlanmamıştı ve sadece Almanca olarak belgelendi. –