2012-06-12 11 views
14

मैं कुछ वर्गों ए, बी, सी पैकेज com.abc मेंPackage.getPackage लौटने अशक्त

मैं पैकेज com.pqr में एक कक्षा मुख्य है

अब मैं एक पैकेज वस्तु बनाने के लिए करना चाहते हैं पिछले pacakge (एबीसी) के।

इस मैंने कोशिश की के लिए,

Package pkg = Package.getPackage("com.abc"); // This gives me null object in pkg 

लेकिन जब मैं करते हैं,

Package pkg = A.class.getPackage(); // It works fine 

किसी को भी सूचित कर सकते हैं, क्यों Package.getPackage ("पैकेज-नाम") काम नहीं कर रहा?

+0

पूरी तरह योग्य पैकेज नाम का प्रयास करें ** जहां ** कक्षाएं पाई जाती हैं। –

+0

यह मेरा पूरी तरह से योग्य नाम है। मेरे प्रोजेक्ट के अंदर मैंने com.abc और com.pqr के नाम से संकुल बनाए हैं, इस मामले में पूरी तरह योग्य नाम क्या होना चाहिए इसका उदाहरण दें। – AurA

उत्तर

21

पैकेज.getPackage केवल एक गैर-शून्य मान वापस कर देगा यदि वर्तमान क्लासलोडर पहले ही पैकेज के बारे में जानता है। इस प्रयास करें:

Package pkg = Package.getPackage("com.abc"); 
System.out.println(pkg); 
Class<A> a = A.class; 
pkg = Package.getPackage("com.abc"); 
System.out.println(pkg); 

पहले System.out 'अशक्त' प्रिंट होगा, दूसरा पैकेज का नाम प्रिंट होगा के रूप में classloader इसमें से एक वर्ग तो भरी हुई है।

+1

आप सही हैं, लेकिन मैं पूछना चाहता हूं कि कक्षा के बिना नाम के माध्यम से पैकेज लोड करने का कोई अन्य तरीका है या नहीं। मेरा मतलब है मान लीजिए कि हम नहीं जानते कि पैकेज में कौन सी कक्षा है। – AurA

+1

आपको [इस प्रश्न] में कुछ उपयोगी जानकारी मिलनी चाहिए (http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection)। प्रतिबिंब पुस्तकालय ऐसा लगता है कि यह वही कर सकता है जो आप चाहते हैं। –

संबंधित मुद्दे