मैं बाइटबडी में एक वर्ग उत्पन्न कर रहा हूँ।

एक विधि कार्यान्वयन के हिस्से के रूप में, मैं एक MethodCall आमंत्रण के वापसी मूल्य के लिए किसी अन्य ऑब्जेक्ट में एक (चलिए बस कहें) public इंस्टेंस फ़ील्ड सेट करना चाहता हूं। (उदाहरण public रखने का मतलब है कि एक्सेस चेक आदि अप्रासंगिक हैं।)

मैंने सोचा कि मैं MethodCall#setsField(FieldDescription)

लेकिन मेरे इससे संबंधित पूर्व प्रश्न से मुझे पता चला कि MethodCall#setsField(FieldDescription) केवल यंत्रीकृत प्रकार के क्षेत्रों पर काम करने के लिए अभिप्रेत है, और, अब इसे देखते हुए, मुझे पूरी तरह से यकीन नहीं है कि मुझे क्यों या कैसे लगा कि यह कभी काम करेगा।

तो: क्या बाइटबड्डी-जेनरेटेड विधि कार्यान्वयन के लिए किसी अन्य ऑब्जेक्ट के इंस्टेंस फ़ील्ड को विधि आमंत्रण के वापसी मूल्य पर सेट करने का कोई तरीका है?

यदि यह मायने रखता है, तो "इंस्ट्रूमेंटेड मेथड" (बाइटबड्डी की शब्दावली में) उस ऑब्जेक्ट को स्वीकार करता है जिसका क्षेत्र मैं एक तर्क के रूप में सेट करना चाहता हूं। भोलेपन से मैं कुछ ऐसा करने में सक्षम होने की उम्मीद करूंगा:

MethodCall.invoke(someMethod).setsField(somePublicField).onArgument(2);

यहां समस्याएं हो सकती हैं जो मुझे दिखाई नहीं दे रही हैं लेकिन मैं इस डीएसएल विकल्प को न देखकर थोड़ा हैरान था। (यह पूरी तरह से अच्छे कारणों से मौजूद नहीं हो सकता है; मुझे नहीं पता कि वे क्या होंगे।)

0
Laird Nelson 31 अक्टूबर 2020, 21:35

1 उत्तर

सबसे बढ़िया उत्तर

बाइट बडी 1.10.18 के रूप में यह संभव नहीं है, उदाहरण के लिए, बीन्स को परिभाषित करते समय तंत्र मूल रूप से गेटर्स/सेटर्स का समर्थन करने के लिए बनाया गया था। उस ने कहा, इसे जोड़ना मुश्किल नहीं होगा; मुझे लगता है कि किसी भी कस्टम बाइट कोड को विधि कॉल के उपभोक्ता के रूप में प्रेषित करने की अनुमति देना और भी आसान होगा।

मैं देखूंगा कि यह कैसे किया जा सकता है, लेकिन एक नई सुविधा के रूप में, मुझे ऐसा करने के लिए खाली जगह मिलने में कुछ समय लगेगा। परिवर्तन GitHub पर ट्रैक किया गया है।

0
Rafael Winterhalter 2 नवम्बर 2020, 11:44