2010-12-10 7 views
9

यह एक साधारण और शायद मामूली सवाल है: जावा में मैं जिस तरीके से काम कर रहा हूं उस विधि को पारित पैरामीटर के माध्यम से मैं कैसे पुन: प्रयास कर सकता हूं?विधि पैरामीटर के माध्यम से इटरेटिंग

मुझे उन सभी को trim() की आवश्यकता है जो तार हैं।

संपादित

अधिक सटीक उपयोग का एक उदाहरण कर सकते हैं इस (एक छद्म कोड में दर्शाती लिखा है कि कैसे मैं यह काम करना चाहते हैं) हो होने के लिए:

public void methodName(String arg1, int arg2, int arg3, String arg4, double arg5) 
    for(Object obj : getThisMethod().getParameters()) 
     System.out.println(obj.getName() + " = " + obj.toString()) 

बिंदु है कि getThisMethod().getParameters()। मुझे उस जगह में क्या लिखना चाहिए?

+0

तुम कैसे विधि घोषणा की तरह दिखता है? – Mot

+2

आपको उनकी आवश्यकता क्यों है? यदि आप पैरामीटर का नाम जानते हैं तो आप इसे अपनी विधि में बहुत ऊपर कर सकते हैं। – Singleton

+2

मेरी विधि कई क्षेत्रों के साथ एक साधारण कन्स्ट्रक्टर है, लेकिन सवाल किसी भी विधि के लिए मान्य है, जिसमें मैं सभी मानकों के साथ कुछ करना चाहता हूं। सरल और सुरुचिपूर्ण कोड लिखना और पैरामीटर को जोड़ने/संशोधित करने के दौरान हर बार इसे बदलने के लिए उपयोगी होगा। – bluish

उत्तर

5

व्यक्तिगत पैरामीटर पुनरावृत्त नहीं हैं; आपको इसके लिए एक संग्रह की आवश्यकता होगी।

यदि वे व्यक्तिगत स्ट्रिंग्स हैं तो आपको केवल एक फावड़ा मिलना होगा।

यदि आपके पास इतने सारे स्ट्रिंग पैरामीटर हैं जो दमनकारी हैं, तो शायद आपकी विधि को फिर से विचार करने की आवश्यकता है। या तो उन सभी पैरामीटर को किसी ऑब्जेक्ट में encapsulated किया जाना चाहिए, क्योंकि वे संबंधित हैं, या वह विधि बहुत अधिक करने की कोशिश कर रही है। यह मेरे लिए एकजुटता की कमी की बात करता है।

+0

धन्यवाद! अब से आपका जवाब सबसे सही लगता है, भले ही भ्रमित हो) :) हालांकि मेरी विधि एक कन्स्ट्रक्टर है, मैं इसे कई फ़ील्ड पास करता हूं जिन्हें डीबी रिकॉर्ड में सहेजा जाना है। मैं सोच रहा हूं: "फावड़ा" क्या है? इसे जावा से जुड़े कभी नहीं सुना .. – bluish

+4

"एक फावड़ा प्राप्त करें" एक अभिव्यक्ति है जिसका अर्थ है "अपनी आस्तीन को रोल करें और काम पर जाएं"। यह आमतौर पर तब आता है जब एक डेवलपर को एक बड़े, कठिन कार्य का सामना करना पड़ता है जिसके लिए क्रूर मस्तिष्क शक्ति के बजाय लंबे प्रयास और धैर्य की आवश्यकता होती है। – duffymo

0

क्योंकि आप अपनी विधि को निम्न में बदलने के लिए बदल सकते हैं, आप उन पर पुन: प्रयास कर सकते हैं।

public void method(String... args) 
+1

... जब तक ओपी के बारे में बात कर रहे तारों को एक समूह के रूप में सोचा जाना चाहिए। ओपी को आसानी से उनके माध्यम से आसानी से सक्षम होने में सक्षम होने के कारण उन्हें एक साथ पैक नहीं करना चाहिए। –

+0

छोटे निसर लेकिन महाकाव्य विफल समाधान भी पैरामीटर के मानचित्र को पास करना होगा और इसके ऊपर पुनरावृत्ति होगा :) – bezmax

+0

@ बर्ट, यह सच है। हालांकि सभी स्ट्रिंग्स को ट्रिम करने की आवश्यकता है (सुझाव दिया गया है कि यह स्ट्रिंग्स का एक समूह हो सकता है। –

0

अपने प्रश्न एक वस्तु से एक स्ट्रिंग पहचान करने के लिए कैसे है, तो आप ऐसा कर सकते हैं: अपने कार्य Varargs का उपयोग करता

if (myObject instanceof String) { 
    // My param is a string! 
} 
7

यदि यह बिल्कुल स्पष्ट है:

private void yourFunction(String... parameters) { 
    for (String parameter : parameters) { 
    // Do something with parameter 
    } 
} 
+1

... जब तक ओपी स्ट्रिंग्स के बारे में बात कर रहा है _should_ को समूह के रूप में सोचा जाए। ओपी को आसानी से उनके माध्यम से आसानी से सक्षम होने में सक्षम होने के कारण उन्हें एक साथ पैक नहीं करना चाहिए। –

+1

मैं इसका उपयोग नहीं कर सकता क्योंकि मेरे पैरामीटर को प्रत्येक का अलग नाम चाहिए। एक सरणी या इसी तरह का उपयोग स्थिति को जटिल करेगा। – bluish

+0

मैं varargs का सुझाव देने जा रहा था .... –

3

कार्य जिसे आप हल करने का प्रयास कर रहे हैं केवल एओपी (आस्पेक्ट ओरिएंटेड प्रोग्रामिंग) फ्रेमवर्क का उपयोग करना संभव है।

एओपी ढांचे आपको इसे बदलने के बिना विधि में कुछ कोड जोड़ने की अनुमति देता है। हकीकत में वे प्रॉक्सी कक्षाएं बनाते हैं जो आपके मूल वर्गों के चारों ओर लपेटते हैं और प्रत्येक विधि से पहले कोड की आवश्यक रेखाएं निष्पादित करते हैं।

हालांकि, एओपी कुछ सरल कार्यों के लिए एक ओवरकिल है क्योंकि इसे आमतौर पर कुछ जटिल विन्यासों और डी ढांचे के साथ एकीकरण की आवश्यकता होती है।

यदि आप अभी भी रुचि रखते हैं तो एओपी ढांचे की कुछ सूची यहां दी गई है: http://java-source.net/open-source/aspect-oriented-frameworks

संपादित करें:

वास्तव में, मुझे लगता है कि आप अपने कार्य को पहली जगह में गलत तरीके से कर रहे हैं। यदि आपकी विधि बिजनेस लेयर का हिस्सा है - इसे गैर-छंटनी वाले पैरामीटर की अनुमति नहीं देनी चाहिए और उस मामले में किसी प्रकार का अपवाद फेंकना चाहिए। यदि आपकी विधि कुछ प्रेजेंटेशन लेयर का हिस्सा है - इसे मैन्युअल रूप से पैरामीटर को साफ करना चाहिए, आमतौर पर उस भाग के पास जहां यह उपयोगकर्ता के पैरामीटर पढ़ता है।

उदाहरण के लिए, यदि आप कुछ स्विंग फॉर्म से पैरामीटर पढ़ रहे हैं, तो आपको अपने कन्स्ट्रक्टर को पास करने से पहले उन्हें ट्रिम करना चाहिए।उदाहरण के लिए:

आपकी वर्तमान कोड:

int someId = Integer.valueOf(idField.getText()); 
String someName = nameField.getText(); 
String someArg = argField.getText(); 
new Constructor(someId, someName, someArg) 

यह कैसे संभाला जाना चाहिए:

int someId = Integer.valueOf(idField.getText()); 
String someName = nameField.getText().trim(); 
String someArg = argField.getText().trim(); 
new Constructor(someId, someName, someArg) 
+0

आपका संपादन हिस्सा यह एक अच्छा अवलोकन है, धन्यवाद! हालांकि मैं जो कुछ भी कहता हूं, उसे करने का एक तरीका ढूंढना चाहता हूं .. यह एक चुनौती बनाम जावा जैसा है;) – bluish

+0

अच्छा, अगर आप इसे आसान बनाना चाहते हैं - जावा ऐसा नहीं कर सकता है। आप विधि पैरामीटर पर पुनरावृत्त नहीं कर सकते हैं। इसके अलावा, आप या तो प्रतिबिंब के साथ स्थानीय चर का उपयोग नहीं कर सकते हैं। तो एकमात्र चीज जो आप कर सकते हैं वह एओपी या ऐसा कुछ है जो सभी कॉल को कक्षा के विशिष्ट तरीके से नियंत्रित कर सकता है। – bezmax