दिलचस्प पोस्ट
ओपनसीवी की चटाई छवि से पिक्सेल चैनल का मूल्य मिलता है डिवाइस की चौड़ाई और फ़ॉन्ट आकार के आधार पर टेक्स्ट व्यू ऊँचाई कैसे मापें? सेलफन बनाम सरल मैटलब लूप प्रदर्शन यूनिकोड में यूटीएफ -8 स्ट्रिंग कैसे परिवर्तित करें? SQL सर्वर में केस संवेदनशील चर सीएसएस के साथ IE8 में सक्रिय हाइपरलिंक के आसपास बिंदीदार सीमा को कैसे निकालना एक JSON स्ट्रिंग के लिए एक iOS उद्देश्य c ऑब्जेक्ट को कनवर्ट करें JSP में विशिष्ट बटन की क्लिक / सबमिट करने पर मैं एक विशिष्ट जावा विधि कैसे कॉल करूं? एमवीसी एचटीएमएल हैपरर्स और लैम्ब्डा एक्सप्रेशन्स जावास्क्रिप्ट में राज्य को अधिकतम करने और अधिकतम करने का पता लगाने के लिए कैसे क्या ggplot2 में पौराणिक वस्तुओं के बीच की रिक्ति को बदलने का एक तरीका है? कोणीय: पृष्ठभूमि-छवि के लिए एनजी-एसआरसी समकक्ष: यूआरएल (…) HTTP उपयोगकर्ता-एजेंट स्ट्रिंग को पार्स करना उन मामलों में क्या हैं जिनमें बिना शर्त और उपयोग करने के लिए बेहतर है (और इसके बजाय &&) GNU sed और BSD / OSX sed दोनों के साथ काम करने के लिए मुझे अपने एसडी -i कमांड की आवश्यकता है

क्यों java.util.Observable एक सार वर्ग नहीं है?

मैंने अभी देखा है कि जावा। ऊतक। ओब्स्सेवेबल एक ठोस वर्ग है। चूंकि पर्यवेक्षण का उद्देश्य विस्तारित होना है, इसलिए यह मेरे लिए अजीब लगता है। क्या इस कारण से इस तरह लागू किया गया था?

मुझे यह लेख मिला जो कहता है

देखे जाने योग्य एक कंक्रीट वर्ग है, इसलिए इसे प्राप्त होने वाला वर्ग पहले ही निर्धारित किया जाना चाहिए, क्योंकि जावा में केवल एक विरासत की अनुमति है

लेकिन यह वास्तव में मुझे समझा नहीं देता वास्तव में, यदि अवलोकन योग्य सार था, तो उपयोगकर्ता इसे से लेकर वर्ग को निर्धारित करने के लिए मजबूर हो जाएगा

Solutions Collecting From Web of "क्यों java.util.Observable एक सार वर्ग नहीं है?"

पहले दृष्टिकोण के रूप में, कोई यह सोच सकता है कि उपयोगकर्ता को विरासत के बजाय संरचना का उपयोग करने की अनुमति दी जाती है, जो बहुत सुविधाजनक है यदि आपकी कक्षा पहले से किसी दूसरे वर्ग से प्राप्त की जाती है , और आप अवलोकन श्रेणी से भी वारिस नहीं कर सकते हैं।

लेकिन अगर हम अवलोकन के स्रोत कोड को देखते हैं, तो हम देखते हैं कि एक आंतरिक ध्वज है

 private boolean changed = false; 

यह हर बार अधिसूचना ओब्सर्सर्स को लाया जाता है:

 public void notifyObservers(Object arg) { Object[] arrLocal; synchronized (this) { if (!changed) return; arrLocal = obs.toArray(); clearChanged(); } for (int i = arrLocal.length-1; i>=0; i--) ((Observer)arrLocal[i]).update(this, arg); } 

लेकिन इस अवलोकन के द्वारा बनाए गए एक वर्ग से, हम इस ध्वज को बदल नहीं सकते , क्योंकि यह निजी है, और इसे बदलने के लिए दिए गए तरीके संरक्षित हैं।

इसका मतलब यह है कि उपयोगकर्ता अवलोकन वर्ग को उप-वर्ग के लिए मजबूर कर दिया गया है, और मैं कहूंगा कि "सार" कीवर्ड की कमी सिर्फ एक "गलती" है

मैं कहूंगा कि यह वर्ग एक पूर्ण स्क्रूप है

काफी आसानी से यह एक गलती है कि निष्कासन एक वर्ग है , बिल्कुल सार या अन्यथा।

Observable एक इंटरफ़ेस होना चाहिए था और जेडीके को एक सुविधाजनक कार्यान्वयन प्रदान करना चाहिए था (जैसे List एक इंटरफ़ेस है और ArrayList एक कार्यान्वयन है)

जावा में काफी कुछ "गलतियां" हैं, जिनमें शामिल हैं:

  • java.util.Stack एक वर्ग है, एक अंतरफलक नहीं (जैसे अवलोकन, बुरा विकल्प)
  • java.util.Properties java.util.Hashtable विस्तारित करता है (एक का उपयोग करने के बजाय)
  • Java.util.Date वर्ग एक गड़बड़ का एक सा है, और अपरिवर्तनीय नहीं है !
  • Java.util.Calendar वर्ग एक असली गड़बड़ है
  • कोई अहस्ताक्षरित 'बाइट' प्रकार (यह एक वास्तविक दर्द और कई निम्न-स्तर की बगों का स्रोत है)
  • java.sql.SQLException एक जाँच अपवाद है
  • Arrays Arrays.toString(array) उपयोग उनके डिफ़ॉल्ट toString() रूप में नहीं करते हैं (यह कितने प्रश्न हैं?)
  • Cloneable योग्य एक मार्कर इंटरफ़ेस नहीं होना चाहिए; इसमें clone() होना चाहिए clone() विधि और Object.clone() मौजूद नहीं होना चाहिए

जबकि सोपबॉक्स पर , भाषा के संदर्भ में, आईएमएचओ:

  • == .equals() विधि को निष्पादित करना चाहिए (यह सिरदर्द का भार पैदा करता है)
  • पहचान तुलना == या तो होनी चाहिए === जावास्क्रिप्ट या एक समर्पित विधि जैसे boolean isIdentical(Object o) , क्योंकि आपको इसे कभी भी ज़रूरत नहीं है!
  • < Comparable ऑब्जेक्ट के लिए (और इसी तरह के > <= , <= , >= ) के लिए compareTo(Object o) < 0 को निष्पादित करना चाहिए