जवाबों:
अंतिम के रूप में चिह्नित एक वर्ग पर निजी निर्माणकर्ता और स्थिर तरीके।
महान पुस्तक "प्रभावी जावा" के अनुसार :
मद 4: एक निजी कंस्ट्रक्टर के साथ गैरबराबरी को लागू करें
- एक वर्ग को अमूर्त बनाकर गैर-अस्थिरता को लागू करने का प्रयास नहीं करता है।
- एक डिफॉल्ट कंस्ट्रक्टर केवल तभी उत्पन्न होता है जब किसी वर्ग में कोई स्पष्ट कंस्ट्रक्टर नहीं होता है, इसलिए किसी निजी डिस्ट्रक्टर को शामिल करके एक वर्ग को गैर-परिवर्तनीय बनाया जा सकता है:
// Noninstantiable utility class
public class UtilityClass
{
// Suppress default constructor for noninstantiability
private UtilityClass() {
throw new AssertionError();
}
}
क्योंकि स्पष्ट निर्माता निजी है, यह कक्षा के बाहर दुर्गम है। जोर-जबरदस्ती की आवश्यकता नहीं है, लेकिन यह तब तक बीमा प्रदान करता है जब निर्माणकर्ता गलती से क्लास के भीतर से लाया जाता है। यह गारंटी देता है कि किसी भी परिस्थिति में वर्ग को कभी भी त्वरित नहीं किया जाएगा। यह मुहावरा हल्का रूप से उल्टा है, क्योंकि कंस्ट्रक्टर को स्पष्ट रूप से प्रदान किया जाता है ताकि इसे लागू न किया जा सके। इसलिए यह एक टिप्पणी शामिल करने के लिए बुद्धिमान है, जैसा कि ऊपर दिखाया गया है।
साइड इफेक्ट के रूप में, यह मुहावरा भी वर्ग को उपवर्गित होने से रोकता है। सभी कंस्ट्रक्टरों को सुपरक्लास कंस्ट्रक्टर को स्पष्ट रूप से या निहित रूप से लागू करना होगा, और एक उपवर्ग में कोई सुपरक्लास कंस्ट्रक्टर नहीं होगा।
AssertionError
जैसे अन्य विकल्पों से अधिक IllegalStateException
, UnsupportedOperationException
, आदि?
लगता है कि आपके पास java.lang.Math के समान उपयोगिता वर्ग है ।
वहाँ दृष्टिकोण निजी निर्माता और स्थिर तरीकों के साथ अंतिम वर्ग है।
लेकिन यह परीक्षण करने के लिए क्या करता है से सावधान रहें, मैं इस लेख को पढ़ने की सलाह देता हूं
स्टेटिक तरीके डेथ टू टेस्टिबिलिटी हैं
बस ऊपर की ओर तैरने के लिए, स्थैतिक सदस्य और वर्ग OO में भाग नहीं लेते हैं और इसलिए दुष्ट हैं। नहीं, बुराई नहीं, लेकिन गंभीरता से, मैं एक्सेस के लिए एक सिंगलटन पैटर्न के साथ एक नियमित वर्ग की सिफारिश करूंगा। इस तरह से यदि आपको सड़क के नीचे किसी भी मामले में व्यवहार को ओवरराइड करने की आवश्यकता है, तो यह एक बड़ी वापसी नहीं है। OO आपका मित्र है :-)
मेरी $ .02
"निजी कंस्ट्रक्टर" तर्कों पर टिप्पणी: चलो, डेवलपर्स बेवकूफ नहीं हैं; लेकिन वे आलसी हैं। एक वस्तु का निर्माण तो स्थिर तरीकों को कहते हैं? होने वाला नहीं।
यह सुनिश्चित करने के लिए बहुत अधिक समय खर्च न करें कि आपकी कक्षा का दुरुपयोग नहीं किया जा सकता है। अपने सहयोगियों के लिए कुछ विश्वास रखें। और हमेशा अपनी कक्षा का दुरुपयोग करने का एक तरीका है कि आप इसे कैसे बचाएं। केवल एक चीज जिसका दुरुपयोग नहीं किया जा सकता है वह एक ऐसी चीज है जो पूरी तरह से बेकार है।
कक्षा को घोषित करने का कोई मतलब नहीं है static
। बस इसके तरीकों को घोषित static
करें और उन्हें सामान्य नाम से जावा के मठ की तरह सामान्य नाम से पुकारें वर्ग ।
इसके अलावा, भले ही यह कंस्ट्रक्टर को निजी बनाने के लिए कड़ाई से आवश्यक नहीं है, लेकिन ऐसा करना एक अच्छा विचार है। कंस्ट्रक्टर को निजी चिह्नित करना अन्य लोगों को आपकी कक्षा के उदाहरण बनाने से रोकता है, फिर उन उदाहरणों से स्थैतिक तरीकों को कॉल करना। (ये कॉल जावा में ठीक उसी तरह काम करते हैं, वे सिर्फ भ्रामक हैं और आपके कोड की पठनीयता पर चोट करते हैं।)
आप lombok से @UtilityClass एनोटेशन का उपयोग कर सकते हैं https://projectlombok.org/features/experimental/UtilityClass