मैं एक अनुकूलित वर्ग के लिए एक क्षेत्र के रूप में जावा क्लास BitSet
का उपयोग करने की कोशिश कर रहा हूं। और मैं कक्षा को सभी बिट्स सेट के साथ एक डिफ़ॉल्ट बिटसेट का उपयोग करना चाहता हूं।ऑब्जेक्ट इंस्टेंटेशन के साथ विधि कॉल ऑब्जेक्ट को ऑब्जेक्ट कर सकता है?
import java.util.BitSet;
public class MyClass {
private BitSet mask;
public MyClass() {
this(new BitSet(4));
// want to set all bits first
// something like
// this(new BitSet(4).set(0,3));
}
public MyClass(BitSet mask) {
this.mask = mask;
}
}
डिफ़ॉल्ट BitSet
निर्माता unsets सभी बिट्स तक। तो इससे पहले कि मैं इसे एक अज्ञात वस्तु के रूप में भेजूं, मैं सभी बिट्स सेट करने के लिए set(int, int)
विधि को कॉल करना चाहता हूं। मुझे पता है कि मैं बस mask
को नए BitSet
पर प्रारंभ कर सकता हूं और फिर वहां से set(int, int)
विधि को कॉल कर सकता हूं।
हालांकि, आम तौर पर मुझे आश्चर्य है कि ऑब्जेक्ट इंस्टेंटेशन के समय एक इंस्टेंस विधि तक पहुंच बनाना संभव है?
मैं जेनेरिक में बहुत कमजोर हूं। लेकिन उपरोक्त वही है जो मैं ढूंढ रहा हूं। यह संक्षेप में है और मुझे 'इस' ऑपरेटर का उपयोग करने की अनुमति भी देता है। फिर मेरे पास गैर-डिफ़ॉल्ट कन्स्ट्रक्टर में सामान्य प्रारंभिक कोड हो सकता है। धन्यवाद! –
आपके द्वारा जोड़े गए तीसरे विकल्प। इस दृष्टिकोण के लिए शब्द क्या है, यदि कोई है? –
यह एक 'इंस्टेंस प्रारंभकर्ता ब्लॉक' है, लेकिन जैसा कि यह एक अज्ञात वर्ग के शरीर के भीतर दिखाई देता है, ऐसा लगता है कि यह कुछ विशेष वाक्यविन्यास है (यह नहीं है)। इसी कारण से, लोग अक्सर इसे 'डबल ब्रेसेस' मुहावरे के रूप में संदर्भित करते हैं (http://stackoverflow.com/questions/1958636/what-is-double-brace-initialization-in-java)। इसे अक्सर [एंटी-पैटर्न] में वर्णित किया जाता है (https://blog.jooq.org/2014/12/08/dont-be-clever-the-double-curly-braces-anti-pattern/) घोंसला संग्रह प्रारंभिकरण के लिए । हालांकि, यहां जिस तरह से पेश किया गया है वह ठीक होना चाहिए। – YoYo