मैं बाइटबडी में एक वर्ग उत्पन्न कर रहा हूँ।
एक विधि कार्यान्वयन के हिस्से के रूप में, मैं एक MethodCall
आमंत्रण के वापसी मूल्य के लिए किसी अन्य ऑब्जेक्ट में एक (चलिए बस कहें) public
इंस्टेंस फ़ील्ड सेट करना चाहता हूं। (उदाहरण public
रखने का मतलब है कि एक्सेस चेक आदि अप्रासंगिक हैं।)
मैंने सोचा कि मैं MethodCall#setsField(FieldDescription)
।
लेकिन मेरे इससे संबंधित पूर्व प्रश्न से मुझे पता चला कि MethodCall#setsField(FieldDescription)
केवल यंत्रीकृत प्रकार के क्षेत्रों पर काम करने के लिए अभिप्रेत है, और, अब इसे देखते हुए, मुझे पूरी तरह से यकीन नहीं है कि मुझे क्यों या कैसे लगा कि यह कभी काम करेगा।
तो: क्या बाइटबड्डी-जेनरेटेड विधि कार्यान्वयन के लिए किसी अन्य ऑब्जेक्ट के इंस्टेंस फ़ील्ड को विधि आमंत्रण के वापसी मूल्य पर सेट करने का कोई तरीका है?
यदि यह मायने रखता है, तो "इंस्ट्रूमेंटेड मेथड" (बाइटबड्डी की शब्दावली में) उस ऑब्जेक्ट को स्वीकार करता है जिसका क्षेत्र मैं एक तर्क के रूप में सेट करना चाहता हूं। भोलेपन से मैं कुछ ऐसा करने में सक्षम होने की उम्मीद करूंगा:
MethodCall.invoke(someMethod).setsField(somePublicField).onArgument(2);
यहां समस्याएं हो सकती हैं जो मुझे दिखाई नहीं दे रही हैं लेकिन मैं इस डीएसएल विकल्प को न देखकर थोड़ा हैरान था। (यह पूरी तरह से अच्छे कारणों से मौजूद नहीं हो सकता है; मुझे नहीं पता कि वे क्या होंगे।)
1 उत्तर
बाइट बडी 1.10.18 के रूप में यह संभव नहीं है, उदाहरण के लिए, बीन्स को परिभाषित करते समय तंत्र मूल रूप से गेटर्स/सेटर्स का समर्थन करने के लिए बनाया गया था। उस ने कहा, इसे जोड़ना मुश्किल नहीं होगा; मुझे लगता है कि किसी भी कस्टम बाइट कोड को विधि कॉल के उपभोक्ता के रूप में प्रेषित करने की अनुमति देना और भी आसान होगा।
मैं देखूंगा कि यह कैसे किया जा सकता है, लेकिन एक नई सुविधा के रूप में, मुझे ऐसा करने के लिए खाली जगह मिलने में कुछ समय लगेगा। परिवर्तन GitHub पर ट्रैक किया गया है।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
byte-buddy
बाइट बडी एक जावा एप्लिकेशन के रनटाइम के दौरान और एक कंपाइलर की मदद के बिना जावा कक्षाएं बनाने और संशोधित करने के लिए एक कोड पीढ़ी और हेरफेर लाइब्रेरी है। बाइट बडी मनमानी वर्गों के निर्माण की अनुमति देता है और रनटाइम प्रॉक्सी के निर्माण के लिए इंटरफेस को लागू करने तक सीमित नहीं है। इसके अलावा, बाइट बडी एक जावा एजेंट का उपयोग करके या निर्माण के दौरान मैन्युअल रूप से कक्षाएं बदलने के लिए एक सुविधाजनक एपीआई प्रदान करता है।