प्रश्न में कोड उदाहरण के लिए, मानक समाधान अपने नाम से वर्ग को स्पष्ट रूप से संदर्भित करना है, और इसके बिना यह करना भी संभव है getClassLoader()
:
class MyClass {
public static void startMusic() {
URL songPath = MyClass.class.getResource("background.midi");
}
}
इस दृष्टिकोण का अभी भी एक पक्ष है कि यह कॉपी / पेस्ट त्रुटियों के खिलाफ बहुत सुरक्षित नहीं है यदि आपको इस कोड को कई समान वर्गों को दोहराने की आवश्यकता है।
और हेडलाइन में सटीक प्रश्न के लिए, आसन्न धागे में एक ट्रिक पोस्ट की गई है :
Class currentClass = new Object() { }.getClass().getEnclosingClass();
यह Object
निष्पादन के संदर्भ को पकड़ने के लिए एक नेस्टेड अनाम उपवर्ग का उपयोग करता है । इस ट्रिक में कॉपी / पेस्ट सुरक्षित होने का एक फायदा है ...
बेस क्लास में इसका उपयोग करते समय सावधानी बरतें कि अन्य वर्ग इनसे विरासत में मिले:
यह भी ध्यान देने योग्य है कि यदि इस स्निपेट को कुछ आधार वर्ग की स्थिर विधि के रूप में आकार दिया जाता है, तो currentClass
मूल्य हमेशा उस आधार वर्ग के संदर्भ में होगा, बजाय किसी उपवर्ग के जो उस पद्धति का उपयोग कर रहा हो सकता है।
getResource()
करने से पहले वहाँ एक उपयोगकर्ता परिभाषित का एक उदाहरण है (उदाहरण के लिए गैर J2SE) वर्ग कभी कभी असफल हो जायेगी। समस्या यह है कि JRE उस स्तर पर बूटस्ट्रैप क्लास-लोडर का उपयोग कर रहा होगा, जिसमें क्लास-पथ (बूटस्ट्रैप लोडर) पर अनुप्रयोग संसाधन नहीं होंगे।