मुझे लगता है कि जो उत्तर आप खोज रहे हैं वह एक "सिंगलटन पैटर्न" है। यह वह जगह है जहां आप अन्य स्थानों में उपयोग के लिए कक्षा का केवल एक उदाहरण बनाते हैं। यहां एक good link to read है। कुछ जावा उदाहरणों के साथ wikipedia page on it यहां है। तब
public class A {
private final static A instance = new A();
/* private constructor forces you to use the getInstance() method below */
private A() {}
public static A getInstance() {
return instance;
}
}
भी आप एक का एक उदाहरण आप की तरह कुछ करना होगा प्राप्त करना चाहते हैं:
तो अपने कोड कुछ इस तरह दिखेगा
public class B {
private final A classA = ClassA.getInstance();
...
}
कोई कारण नहीं क्यों A
कर सकता है B
का उदाहरण भी नहीं है और B
के तरीकों को अपने तरीके से कॉल करें। इस क्रॉस निर्भरता के साथ आप क्या नहीं कर सकते हैं कन्स्ट्रक्टर में किसी अन्य तरीके को कॉल करें।
सामान्य रूप से, इन पैटर्नों का उपयोग कम से कम किया जाना चाहिए। इसे पूरा करने का एक बेहतर तरीका वैश्विक संदर्भों के बजाय निर्भरता इंजेक्शन के माध्यम से है। क्रॉस इंजेक्शन संभव है लेकिन फिर से, इसे कम से कम इस्तेमाल किया जाना चाहिए। कक्षाओं पर निर्भरता रखने के लिए कक्षाओं को दोबारा सुधारने का एक बेहतर समाधान होगा।
वहाँ जावा में किसी भी अवधारणाओं है कि एक चर के रूप में वस्तु के लिए (एक सूचक की तरह) वास्तविक वस्तु का संदर्भ होगा वस्तु की एक प्रतिलिपि बनाने के बजाय है?
जावा लेकिन मूल्य द्वारा पारित किसी भी वस्तु का मूल्य है वस्तु के संदर्भ में (सी में संकेत के समान है, हालांकि वे कर रहे हैं नहीं एक स्मृति पता) है। इसलिए यदि आपके पास A
का उदाहरण है और इसे किसी अन्य फ़ील्ड में असाइन करें, तो वह फ़ील्ड वही मान होगा और A
के उसी उदाहरण का संदर्भ देगा।
// instantiate a new instance of A
A a1 = new A();
// assign the reference to A to another variable
a2 = a1;
// they are equivalent and both reference the same object
if (a1 == a2) ...
बारे में बात करें:
दूसरा उपयोग के लिए एक स्थिर ब्लॉक चर init खराब डिजाइन .. – mre
(Obplead: कृपया, कृपया, कृपया म्यूटेबल स्टेटिक्स (जिसे पहले ग्लोबल्स के नाम से जाना जाता है) का उपयोग न करें। और इसमें सिंगलटन एंटीपाटर का उपयोग करना शामिल है।) –