2010-06-24 6 views
7

में साइड-इफेक्ट फ्री विधियां मैं जावा प्रोग्राम के विश्लेषण पर काम कर रहा हूं जिसके लिए विधि कॉल के बारे में साइड-इफेक्ट जानकारी की आवश्यकता है। मानक लाइब्रेरी कक्षाओं के लिए, मैं केवल-पढ़ने वाले पैरामीटर के साथ विधियों की एक सूची संकलित करना चाहता हूं। यही वह तरीका है जो उनके तर्कों को संशोधित नहीं करता है, या उनके तर्कों से पहुंचने योग्य कुछ भी नहीं। मैं javadocs से बहुत कुछ अनुमान लगा सकता हूं, लेकिन इसमें समय लगेगा।जावा मानक लाइब्रेरी

कोई भी यह निर्धारित करने के लिए एक आसान संदर्भ या विधि सुझा सकता है कि मानक विधि कॉल उनके तर्कों को संशोधित करता है या नहीं? प्रत्येक javadoc प्रविष्टि के माध्यम से वास्तव में सबसे अच्छा तरीका पढ़ रहा है?

धन्यवाद!

संपादित करें: एक बोनस उन विधियों की पहचान करेगा जो ऑब्जेक्ट पर कोई दुष्प्रभाव नहीं रखते हैं। उदाहरण के लिए, stack.pop() होगा जबकि stack.size() नहीं होगा।

+1

मुझे आपका समाधान देखने में दिलचस्पी होगी। आप किसी भी तरीके को मान सकते हैं जो अपरिवर्तनीय प्रकार लेते हैं, दुष्प्रभाव मुक्त है। सुनिश्चित नहीं है कि आप javadocs और कोड के अलावा और क्या कर सकते हैं। –

+0

@ एसबी: बस ध्यान रखें कि 'स्ट्रिंग' अपरिवर्तनीय है, लेकिन 'CharSequence' लागू करने वाली कक्षाएं हो सकती हैं या नहीं भी हो सकती हैं। – Powerlord

उत्तर

1

ठीक है, पैरामीटर के रूप में केवल आदिम प्रकार/तार/ऑब्जेक्ट/जेनेरिक प्रकार लेने वाले सभी तरीकों को बिना किसी विचार के आपको संतुष्ट करना चाहिए। और java.lang और java.util के लिए इसमें अधिकांश विधियों को शामिल करना चाहिए।

लेकिन आप उन संकुल को सीमित करना चाहते हैं जिन्हें आप संसाधित करना चाहते हैं, क्योंकि मानक जेडीके सभी कार्यों और उद्देश्यों के लिए कक्षाओं की विशाल पुस्तकालय प्रदान करता है।

संपादित
यह सामान्य प्रकार E extends ModifiableObject के रूप में घोषित करने के लिए कुछ हद तक fuzzier है, तो खुद के लिए देखते हैं।

+0

यह एक शुरुआती बिंदु के रूप में एक अच्छा सुझाव है, धन्यवाद। – Owen

1

आप जेडीके के स्रोत कोड के खिलाफ एक प्रकार अनुमान इंजन चलाने का प्रयास कर सकते हैं।

शायद पेपर Type qualifier inference for Java का उपयोग किया जा सकता है। (हालांकि पूर्ण पाठ ऑनलाइन नहीं दिखता है)

1

हमारे DMS Software Reengineering Toolkit एक सामान्य उद्देश्य अनुकूलन प्रोग्राम विश्लेषण और परिवर्तन उपकरण है। इसमें Java Front End है जो जावा को पार करता है और प्रतीक तालिकाओं, वर्ग विरासत संबंध, नियंत्रण और डेटा प्रवाह जानकारी उत्पन्न करता है।

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

ऐसा करने के लिए डीएमएस को कॉन्फ़िगर करना सभी आपूर्ति की गई जानकारी के साथ भी छोटा नहीं है। ओटीओएच, यह उत्तर बहुत सटीक (मॉड्यूलो रूढ़िवादी धारणाएं और प्रतिबिंब), दोहराने योग्य, और आपके द्वारा चुने गए किसी भी विधि पर लागू करने में आसान हो रहा है। जावाडॉक्स के माध्यम से हाथ से ऐसा करना बेहद समय लेने वाला और त्रुटि प्रवण होने की संभावना है।