2016-01-08 9 views
5

Property इंटरफ़ेस जावाएफएक्स द्वारा जोड़ा गया एक प्रकार पैरामीटर T है, जो संपत्ति द्वारा लिपटे मान का प्रकार है। आदि IntegerProperty, FloatProperty, इन सभी वर्गों को लागू Property<Number>:क्यों IntegerProperty प्रॉपर्टी <Number> लागू करता है और संपत्ति <Integer> नहीं?

Property इंटरफ़ेस के कार्यान्वयन के बीच, संख्या के लिए कुछ कर रहे हैं।

उदाहरण के लिए IntegerProperty लें। इसका कारण यह है कि यह Property<Number> लागू करता है और Property<Integer> जैसा कि मैंने अपेक्षा की थी?


यहाँ है एक यूएमएल आरेख जो IntegerProperty के पदानुक्रम को स्पष्ट:

enter image description here

+0

मेरे पास डीजा वी की अजीब भावना है। क्या आपने पहले इस सवाल से पूछा है? – Kayaman

+1

@ कयामन नो, पहले कभी नहीं पूछा गया। मैंने यह जांचने के लिए भी अपनी पूरी कोशिश की है कि कोई और पहले से ही किया गया है या नहीं। –

+2

संभावित रूप से इस तरह कार्यान्वित किया गया ताकि संख्या गुणों को बांधना आसान हो सके। Http://stackoverflow.com/q/28179293/1288408 –

उत्तर

5

एक जावा बग रिपोर्ट (DoubleProperty has unexpected generics type) की टिप्पणी अनुभाग में उल्लेख किया है,

इस डिजाइन का इरादा है। यह आवश्यक विधियों की संख्या को काफी छोटा रखता है।


इस जवाब की टिप्पणी में, James_D मुझे कि इस मुद्दे को, ChangeListener cannot be added to SimpleIntegerProperty) को संबोधित एक बाद बग रिपोर्ट से अवगत कराया। टिप्पणी

हमने पिछड़े-संगतता मुद्दों के कारण आदिम प्रकार के गुणों (संख्या से विशिष्ट प्रकार) के जेनरिक को बदलने का फैसला नहीं किया है। हालांकि, इसका मतलब है कि इस मुद्दे को ठीक नहीं किया जा सकता है।

सुझाव देता है कि टीम ने डिजाइन को बदलने पर विचार किया, लेकिन यह बहुत देर हो चुकी थी।

+3

मुझे रैंडहल इसासेन द्वारा टिप्पणी के साथ सहमत होना है: "फिर भी, मेरे लिए यह जेनेरिक का अनुचित उपयोग प्रतीत होता है। जावा डेवलपर्स जिनका उपयोग किया जाता है जेनेरिक उम्मीद करेंगे कि जेनिक्स का उपयोग करने वाले फलोंक्रेट एक क्रेट क्रेट नहीं है। जेनिक्स का उपयोग करने का पूरा उद्देश्य समय प्रकार की सुरक्षा और कम कास्टिंग संकलित करना सुनिश्चित करना है। इस डिज़ाइन के साथ, आप संकलन में प्रकारों के उचित उपयोग की पूरी तरह से गारंटी नहीं दे सकते समय और आपको अभी भी कास्टिंग की आवश्यकता है। मुझे पता है कि यह डिज़ाइन आंतरिक रूप से आपके एपीआई को सरल बना सकता है, लेकिन बाहरी रूप से, यह जावाएफएक्स एपीआई की गुणवत्ता को कम करता है। " – Itai

+3

जावाएफएक्स डेवलपर टीम से बाद में टिप्पणियों में (उदाहरण के लिए http://mail.openjdk.java.net/pipermail/openjfx-dev/2014- फरवरी/012739.html) आप संदर्भों को देखना शुरू करते हैं "हमने ठीक करने का प्रयास किया यह लेकिन बहुत देर हो चुकी थी ", जो मुझे बताती है कि जब इसका इरादा हो सकता है, तो यह एक गलती थी। ऐसे अन्य समाधान भी हैं जिनमें एपीआई को संयोजित करने में शामिल नहीं है, उदा। 'सार्वजनिक अमूर्त वर्ग संख्याप्रोपर्टी <एन संख्या बढ़ाता है> प्रॉपर्टी लागू करता है' और 'पब्लिक क्लास इंटीजरप्रोपर्टी न्यूमेरप्रोपर्टी ' बढ़ाता है, जैसा कि कई लोगों द्वारा सुझाया गया है। –

0

मैं कहना चाहता हूँ कि वे Number उपयोग करते हैं, तो आप AtomicInteger और BigInteger आदि के रूप में के साथ उन वर्गों का उपयोग कर सकते कुंआ।

जहां तक ​​मैं बता सकता हूँ, DoubleProperty और IntegerProperty के बीच केवल "असली" अंतर विधि setValue(Number v) है - एक का उपयोग करता v.doubleValue(), अन्य v.intValue()

मेरे पास यहां एक कामकाजी जावाफैक्स वातावरण नहीं है, इसलिए IntegerProperty का उपयोग Double के साथ अपवाद फेंकने पर मैं परीक्षण नहीं कर सकता।

संबंधित मुद्दे