क्या आपने कभी जावा में self modifying code बनाया है या सामना किया है? यदि हां, तो कृपया लिंक पोस्ट करें या बस कोड पोस्ट करें।जावा में स्वयं संशोधित कोड
उत्तर
दुःख की दुनिया को अनदेखा कर आप स्वयं को संशोधित कोड के माध्यम से उत्पन्न कर सकते हैं (!), मुझे लगता है वहाँ 3 विकल्प हैं:
- जावा 6 की इनबिल्ट संकलक समर्थन का उपयोग करें और लिखने/recompile/पुनः लोड कक्षाएं
- अपाचे BCEL बाईटकोड हेरफेर पुस्तकालय का उपयोग अपनी कक्षा सीधे
- लिखने के लिए जावा 6 के इनबिल्ट पटकथा समर्थन का इस्तेमाल करते हैं (या अपाचे BSF का उपयोग करें) अपनी पसंद के JVM पटकथा भाषा में तरीकों लिखने के लिए, और इन
निष्पादित, मेरी प्रारंभिक विकल्प (आवश्यकताओं के अभाव में) होगा टा करने के लिए हो के विकल्प 3 पर एक नज़र डालें। मुझे संदेह है कि यह शुरू करने का सबसे दर्दनाक तरीका है। मैंने उपरोक्त सभी का उपयोग किया है - दुर्भाग्य से मैं क्लाइंट कोड के लिंक पोस्ट नहीं कर सकता।
बीसीईएल के बजाय ऑब्जेक्टवेब एएसएम [http://asm.ow2.org/] का उपयोग करें – KitsuneYMG
यह महसूस करना मुश्किल होना चाहिए। लेकिन आप रनटाइम नई कक्षाओं में बना सकते हैं और उन्हें कस्टम क्लासलोडर के साथ लोड कर सकते हैं। यदि आप कोड को फिर से संशोधित करना चाहते हैं, तो आपको कक्षा को फिर से लोड करना होगा।
लिंक करें जो काफी फैक्ट्री विधि होगी! – akf
तुम हमेशा सिर्फ एक गतिशील भाषा इस्तेमाल कर सकते हैं ...
BCEL से:
बाइट कोड इंजीनियरिंग लाइब्रेरी, विश्लेषण बनाते हैं, और हेरफेर करने के लिए उन एक सुविधाजनक संभावना देना है (बाइनरी) जावा क्लास फाइलें (जो क्लास के साथ समाप्त होती हैं)। कक्षाएं वस्तुओं द्वारा प्रतिनिधित्व की जाती हैं जिनमें सभी दिए गए वर्ग की प्रतीकात्मक जानकारी शामिल हैं: विधियों, फ़ील्ड और बाइट कोड निर्देश, विशेष रूप से।
मुझे वास्तव में जेरेमी नहीं मिला। क्या आप वर्तमान संदर्भ में बात कर रहे हैं? –
बीसीईएल काम का एक हिस्सा करता है: यह आपको नई कक्षाओं को उत्पन्न करने या कुशल बनाने में मदद करता है। दूसरी बात यह है कि जावा में अंतर्निहित नई कक्षाओं को लोड करना है: प्रतिबिंब-एपीआई। – Mnementh
मैं इस उद्देश्य के लिए इन विकल्पों में देखें:
- जावा स्रोत कोड जनरेट करें और बाहरी javac या आंतरिक संकलक उपकरण (नाम याद नहीं है) के साथ यह संकलन। और जैसा कि आप नामकरण के लिए ज़िम्मेदार हैं, क्लास लोडिंग विसंगतियों से बचने के लिए कक्षा के नाम में संस्करण गणना शामिल करें। मैं एक बार एक जावा 1.4 प्रोग्राम है जो एक मौजूदा विरासत डेटाबेस से व्यापार के नियम ले लिया बनाई, उत्पन्न जावा:
- JavaScript इंजन समर्थन
- कुछ परिदृश्य जावा proxys
संपादित का उपयोग कर हल किया जा सकता में बनाया का उपयोग करें फाइलें (मूल रूप से एक अनुमानित इंटरफ़ेस का कार्यान्वयन) उनमें से println() के समूह के साथ और उन्हें संकलित करने के लिए कमांड लाइन javac का उपयोग किया।
एक छात्र मैं JikesRVM पर काम मिल गया है। यह जावा में एक जेवीएम लागू (ज्यादातर) है। रनटाइम पर यह जेआईटी खुद संकलित होगा! यह तकनीक का एक बहुत अच्छा टुकड़ा है।
यदि संभव हो तो कृपया कोड पोस्ट करें या –