फिलहाल मैं जावा स्विंग के लिए एक एनोटेशन-आधारित बाइंडिंग-फ्रेमवर्क विकसित कर रहा हूं जो हुड के नीचे JGoodies Binding का उपयोग करता है। दुर्भाग्यवश मैं जेआरडीओ बटन-बाइंडिंग के लिए एनोटेशन के साथ फंस गया हूं। मैं जो करना चाहता हूं वह एक मॉडल का एक संपत्ति-नाम निर्दिष्ट करता है जिसमें एक विशेष मूल्य (enum) होता है। यदि इस संपत्ति का एक विशिष्ट मूल्य है तो रेडियो-बटन का चयन किया जाएगा। अब मैं इस तरह एनोटेशन में मूल्य निर्दिष्ट करना चाहते हैं:* किसी भी * enum के लिए एनोटेशन विशेषता घोषित करने का कोई तरीका है?
@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.FIRST)
JRadioButton firstButton
@RadioButtonBinding(property = "selectedItem", selectedValue = MyEnum.SECOND)
JRadioButton secondButton
हालांकि, मैं कैसे टिप्पणी के ऊपर और किसी भी अन्य enum अनुमति देने के लिए भी घोषित करने के लिए पता नहीं है। मेरा पहला अनुमान यह था, लेकिन मैंने सीखा कि एनोटेशन गुण सामान्य नहीं हो सकते:
@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();
}
कोई विचार यह कैसे हल करें?
यहां सूचीबद्ध रेडियोबटन बाध्यकारी एनोटेशन में दो विचार शामिल हैं: पहला यह है कि एनम क्लास और स्ट्रिंग स्थिरांक को इसका उपयोग करने के लिए निर्दिष्ट करना है। लेकिन यह पाठ्यक्रम के प्रकार नहीं है और रनटाइम अपवादों का कारण बन सकता है। दूसरा एक एनम के मूल्य को सीधे निर्दिष्ट करना है, लेकिन ऐसा लगता है कि यह काम नहीं करता है। –
बीटीडब्ल्यू मैंने जेजीडीज के साथ इस तरह की कई चीजें कीं, जो जावा में मेरे पास अधिक दुखी समय था। सबसे बड़ी समस्या यह है कि उसके पास "आधार" वर्ग है जो उसके अधिकांश वर्गों का विस्तार करता है और इसलिए उनके तरीकों में विधि (आधार, आधार, आधार) जैसे हस्ताक्षर होते हैं, जहां "बेस" कक्षा उत्तीर्ण होती है, लेकिन यह एक विशिष्ट उदाहरण होना चाहिए लेकिन हस्ताक्षर आपको कोई संकेत नहीं देता है कि यह किस विशिष्ट वर्ग का उदाहरण होना चाहिए। बाइंडिंग्स हिस्सा एक अच्छा विचार था, लेकिन उस समय उन्होंने इसे अच्छी तरह से समर्थन नहीं दिया था (यह साल पहले) और यह अधूरा था और केवल जर्मन में दस्तावेज किया गया था। –