2010-04-29 28 views
15

जावा में, बाइटकोड प्राप्त करने के लिए एक विशेष वर्ग परिभाषित करने के लिए एक रन (रनटाइम पर) है?क्या रनटाइम पर कक्षा के लिए बाइटकोड प्राप्त करने का कोई तरीका है?

एक और तरीका रखो, byte[] सरणी ClassLoader.defineClass(String name, byte[] b, int off, int len) को पारित करने का कोई तरीका है जब कोई विशेष वर्ग लोड किया गया हो? मुझे लगता है कि इस विधि को final घोषित किया गया है, इसलिए कक्षा परिभाषाओं को रोकने के लिए कस्टम ClassLoader बनाना प्रश्न से बाहर है।

अतीत में, मैंने getResourceAsStream(String) विधि के माध्यम से बाइटकोड प्राप्त करने के लिए कक्षा के ClassLoader का उपयोग किया है, लेकिन मैं एक और कैननिकल समाधान पसंद करूंगा।

+0

getResourceAsStream(String) विहित नहीं क्यों है लागू करने के लिए है? – Riduidel

+2

@Riduidel: सभी वर्ग लोडर संसाधन के रूप में बाइटकोड का पर्दाफाश नहीं करते हैं। उदाहरण के लिए, कुछ कस्टम क्लास लोडर फ्लाई * पर बाइटकोड * उत्पन्न करते हैं और 'getResourceAsStream' कहलाते समय इसे वापस करने पर परेशान नहीं करते हैं। –

+0

यह एक मूर्ख सवाल हो सकता है, लेकिन आपको किसी दिए गए वर्ग के लिए बाइट कोड क्यों प्राप्त करने की आवश्यकता है? संभवतः आप getResourceAsStream का उपयोग नहीं करना चाहते हैं क्योंकि कुछ वर्ग किसी अन्य क्लासलोडर द्वारा लोड किए जा सकते हैं? – Geoff

उत्तर

5

"जावा एजेंट" स्पष्ट समाधान होगा।

+0

दिलचस्प, मैंने पहले एजेंटों के बारे में कभी नहीं सुना है! –

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

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