2011-10-29 29 views
8

क्या आप एक विधि के रूप में एक नई सरणी पास कर सकते हैं, और अभी भी उस सरणी में डेटा है?पैरामीटर के रूप में जावा Arrays

उदाहरण के लिए, मेरे पास यह विधि है: foo(String[]), और मैं इसे foo(new String[] s = {"String1", "String2"}) की तरह कॉल करना चाहता हूं। लेकिन यह वैध जावा नहीं है।

उत्तर

18

यह एक "वैध जावा जिस तरह से" (के रूप में, यह संकलित करता है तथा आप क्या चाहते हैं करता है) है:

foo(new String[] {"String1", "String2"}); 

आप इस विधि को बदलने का अवसर है, तो स्पष्ट रूप से एक सरणी बनाने के लिए

public void foo(String... strings) { 
    // ... 
} 

तो फिर तुम यह आवश्यकता के बिना इस प्रकार के रूप में उपयोग कर सकते हैं:: यदि आप भी एक varargs तर्क लेने के लिए प्रक्रिया में परिवर्तन करना विचार कर सकते हैं निम्नलिखित

foo("String1", "String2"); 

तो भी मान्य है :

foo("String1"); 

और

foo("String1", "String2", "String3"); 

और भी अधिक।

+0

कैसे तो vaue पाने के लिए? –

4

यदि आप स्थानीय चर s बनाने की कोशिश कर रहे हैं और इसे चारों ओर रखें, नहीं, तो आप एक विधि कॉल के भीतर एक चर घोषित नहीं कर सकते हैं। आप कॉल के बाहर पहले यह घोषणा करने के लिए है:

String[] s = {"String1", "String2"}; 
foo(s); 

आप कॉल के भीतर s प्रारंभ कर सकता है, लेकिन मैं ऐसा करने के लिए किसी भी कारण नहीं दिख रहा है, के साथ साथ यह वास्तव में बुरा लग रहा है:

String[] s; 
foo(s = new String[] {"String1", "String2"}); 
1

आप केवल मूल्य पास करना चाहते हैं और अब और चर s की जरूरत नहीं है, इस तरह यह कार्य करें:

foo(new String[] {"String1", "String2"}); 
0

आप एक चर की घोषणा नहीं कर सकते हैं, लेकिन आप एक सरणी पारित कर सकते हैं:

foo(new String[] { "String1", "String2" }); 

आप बाद में एक ही सरणी का संदर्भ लेना चाहते हैं, तो आप कॉल करने से पहले यह घोषणा करने के लिए की जरूरत है।

0

तुम बस foo (नई String [] { "STRING1", "string2"}) कर सकता है

संबंधित मुद्दे