java - सूर्य की मालिकाना जावा कक्षाओं का उपयोग करना एक बुरा अभ्यास है?




sun (7)

जेडीके 6 दस्तावेज़ीकरण में sun.* बारे में नोट शीर्षक वाला एक लिंक शामिल है sun.* पैकेज । यह जावा 1.2 डॉक्स से एक दस्तावेज़ है, इसलिए sun.* संदर्भ sun.* जैसे इलाज किया जाना चाहिए com.sun.*

इससे सबसे महत्वपूर्ण बिंदु हैं:

जावा 2 एसडीके, मानक संस्करण के साथ सूर्य में शामिल वर्ग, पैकेज समूह java.* में आते हैं java.* , javax.* , org.* और sun.*sun.* सभी sun.* पैकेज जावा प्लेटफार्म का एक मानक हिस्सा हैं और भविष्य में समर्थित होंगे। सामान्य रूप से, जावा प्लेटफ़ॉर्म के बाहर sun.* जैसे sun.* , ओएस प्लेटफॉर्म (सोलारिस, विंडोज, लिनक्स, मैकिंतोश इत्यादि) में अलग-अलग हो सकते हैं और एसडीके संस्करणों (1.2, 1.2.1, 1.2.3, आदि)। कार्यक्रम जिनमें sun.* को सीधे कॉल शामिल sun.* पैकेज 100% शुद्ध जावा नहीं हैं।

तथा

जावा प्लेटफ़ॉर्म लागू करने वाली प्रत्येक कंपनी अपने निजी तरीके से ऐसा करेगी। sun.* में कक्षाएं sun.* जावा प्लेटफ़ॉर्म के सूर्य कार्यान्वयन का समर्थन करने के लिए एसडीके में मौजूद हैं: sun.* कक्षाएं जावा प्लेटफार्म कक्षाएं सूर्य जावा 2 एसडीके के लिए "कवर के तहत" काम करती हैं। ये कक्षाएं आम तौर पर किसी अन्य विक्रेता के जावा प्लेटफ़ॉर्म पर मौजूद नहीं होंगी। यदि आपका जावा प्रोग्राम नाम से "sun.package.Foo" वर्ग के लिए पूछता है, तो यह ClassNotFoundError के साथ विफल हो सकता है, और आप जावा में विकास का एक बड़ा फायदा खो देंगे।

यदि आप सूर्य की मालिकाना जावा कक्षाओं का उपयोग करते हैं तो संकलक डिस्प्ले चेतावनी देता है। मेरा मानना ​​है कि इन वर्गों का उपयोग करना आम तौर पर एक बुरा विचार है। मैंने इसे कहीं पढ़ा। हालांकि, चेतावनियों के अलावा वहां कोई मौलिक कारण हैं कि आपको उनका उपयोग क्यों नहीं करना चाहिए?


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

तो आप अपने कोड को विशेष जावा संस्करण में जोड़ते हैं और कम से कम पोर्टेबिलिटी खो देते हैं।



एक गैर-सूर्य JVM के साथ अपना कोड चलाने का प्रयास करें और देखें कि क्या होता है ...

(आपका कोड क्लास नॉटफाउंड अपवाद के साथ विफल हो जाएगा)


चूंकि वे आंतरिक एपीआई हैं: वे एक अनियंत्रित या असमर्थित तरीके से परिवर्तन के अधीन हैं और वे आपके कार्यक्रमों की पोर्टेबिलिटी सीमित करने के लिए एक विशिष्ट जेआरई / जेडीके (आपके मामले में सूर्य ) से बंधे हैं।

ऐसे एपीआई के उपयोग से बचने के लिए प्रयास करें, हमेशा सार्वजनिक दस्तावेज और निर्दिष्ट कक्षा पसंद करते हैं।


मेरे पास हाल ही में एक ऐसा मामला था जिसने आप इन कक्षाओं का उपयोग करते समय एक वास्तविक दुनिया की समस्या को दिखाया: हमारे पास कोड था जो संकलित नहीं करेगा क्योंकि यह एक सूर्य पर उपयोग कर रहा था। * कक्षा बस उबंटू पर ओपनजेडीके में मौजूद नहीं थी। तो मुझे लगता है कि इन कक्षाओं का उपयोग करते समय आप अब 'जावा 5 के साथ काम करता है' जैसी चीजें नहीं कह सकते हैं, क्योंकि यह केवल एक निश्चित जावा कार्यान्वयन पर काम करेगा।


  • सार्वजनिक - आवेदन में कहीं से भी सुलभ।

  • डिफ़ॉल्ट - पैकेज से सुलभ।

  • संरक्षित - पैकेज और उप-वर्गों से अन्य पैकेज में सुलभ। भी

  • निजी - केवल अपनी कक्षा से सुलभ।





java sun