अजगर में, मैं कर सकते हैं:जावा में विधि के लिए तर्क कैसे पास करें, जैसे कि python में f (* args)?
args = [1,2,3,4]
f(*args) # this calls f(1,2,3,4)
जावा में यह संभव है?
स्पष्टीकरण के लिए - f में चर की लंबाई की एक तर्क सूची है।
अजगर में, मैं कर सकते हैं:जावा में विधि के लिए तर्क कैसे पास करें, जैसे कि python में f (* args)?
args = [1,2,3,4]
f(*args) # this calls f(1,2,3,4)
जावा में यह संभव है?
स्पष्टीकरण के लिए - f में चर की लंबाई की एक तर्क सूची है।
ज़रूर, तुम ठीक कर vararg-methods का उपयोग कर कि करने के लिए सक्षम होना चाहिए। आप अस्पष्टता बारे में चिंतित हैं, जब यह इस तरह के Object...
के रूप में तर्क की बात आती है कोड के इस टुकड़े को स्पष्ट करना चाहिए:
public class Test {
public static void varargMethod(Object... args) {
System.out.println("Arguments:");
for (Object s : args) System.out.println(s);
}
public static void main(String[] args) throws Exception {
varargMethod("Hello", "World", "!");
String[] someArgs = { "Lorem", "ipsum", "dolor", "sit" };
// Eclipse warns:
// The argument of type String[] should explicitly be cast to Object[]
// for the invocation of the varargs method varargMethod(Object...)
// from type Test. It could alternatively be cast to Object for a
// varargs invocation
varargMethod(someArgs);
// Calls the vararg method with multiple arguments
// (the objects in the array).
varargMethod((Object[]) someArgs);
// Calls the vararg method with a single argument (the object array)
varargMethod((Object) someArgs);
}
}
आउटपुट:
Arguments:
Hello
World
!
Arguments:
Lorem
ipsum
dolor
sit
Arguments:
Lorem
ipsum
dolor
sit
Arguments:
[Ljava.lang.String;@1d9f953d
आप ऐसा नहीं कर सकते हैं एक गैर-vararg विधि के लिए। हालांकि, एक गैर vararg विधि तर्क की एक निश्चित संख्या है, तो आप
nonVarargMethod(args[0], args[1], args[2]);
आगे और अधिक करने के लिए सक्षम होना चाहिए, वहाँ संकलक अतिभारित तरीकों के आधार पर स्थिति का समाधान बताने के लिए कोई रास्ता नहीं है सरणी का आकार या प्रकार।
दो तरह से उपयोग करने के लिए नहीं है जावा में varargs
public static void main(String... args)
या
मेरे उदाहरण में यह तार के साथ है, लेकिन आप भी पूर्णांक के साथ ऐसा कर सकते हैं।
उन्हें कॉल करने के लिए (यह दोनों पर काम करता है),
main("hello", "world");
या
main(new String[]{"hello", "world"});
एक विधि को एक varargs पैरामीटर के साथ घोषित किया जा सकता है, और एक सरणी के साथ बुलाया जा सकता है, जैसा कि अन्य उत्तरों द्वारा सुझाया गया है।
विधि आप आह्वान करने के लिए एक varargs पैरामीटर नहीं होता है चाहते हैं, आप आत्मनिरीक्षण के साथ कुछ इस तरह कर सकते हैं, हालांकि यह थोड़ा भद्दा है:
class MyClass {
public void myMethod(int arg1, String arg2, Object arg3) {
// ...code goes here...
}
}
Class<MyClass> clazz = MyClass.class;
Method method = clazz.getMethod("myMethod", Integer.TYPE, String.class, Object.class);
MyClass instance = new MyClass();
Object[] args = { Integer.valueOf(42), "Hello World", new AnyObjectYouLike() };
method.invoke(instance, args);
यहाँ हम पर विधि के लिए arguemnts बीत चुके हैं विधि कॉल, नीचे उदाहरण देखें, उदाहरण के लिए
विवरण नीचे है;
वहां हमारे पास मूल्य 10 के साथ एक int चर है, यह एक विधि स्थानीय चर है। फिर हम प्रिंट कथन के अंदर हमारी विधि एम (int x) को कॉल करते हैं। फिर एम (int x) में एक पैरामीटर int x चर है, यह x एक स्थानीय स्थानीय चर भी है। आप केवल इस विधि के भीतर ही इसका उपयोग कर सकते हैं। फिर विधि के अंदर आप एक्स के मान को मुद्रित करते हैं, जो कि 10 है, क्योंकि विधि कॉल पर एक तर्क वाई पास हो जाता है, जिसमें मान 10 होता है। मान 10 विधि विधि विधि स्थानीय चर एक्स को असाइन किया जाता है, जिसे विधि पैरामीटर के अंदर घोषित किया जाता है।अब जब हम एक्स प्रिंट करने के लिए कहते हैं तो यह 10 प्रिंट करेगा।
फिर एक और विधि स्थानीय चर बनाएं और एक्स मान में कुछ मान जोड़ें और असाइन करें और उस चर को वापस कर दें। आप एक मूल्य वापस कर रहे हैं, इसलिए अब आप यह जांचने जा रहे हैं कि विधि शून्य नहीं है, और int int प्रकार है, क्योंकि int में 10 है।
चूंकि आपकी विधि प्रिंट स्टेटमेंट के अंदर लिखी गई है। आपका रिटर्निंग वैल्यू भी इस कार्यक्रम में मुद्रित हो जाता है। तो नीचे कोड है।
class A
{
static int m(int x)
{
System.out.println("x : "+x);
int a= x+10;
System.out.println("a : "+a);
return a;
}
public static void main(String args[])
{
int y=10;
System.out.println(m(y));
}
}
आउटपुट:
x : 10
a: 20
20
यह वास्तव में नहीं हो सकता है क्या ओपी लिए पूछ रहा है - यह है कि वे अगर वे एक गैर vararg कार्य करने के लिए तर्क की एक सरणी पारित कर सकते हैं पूछ रहे हैं लगता है। – Amber
वास्तव में - यह varargs के विपरीत है। ओपी एक तर्क के रूप में एक सरणी के साथ एक गैर-सरणी-तर्क विधि को कॉल करना चाहता है। – gustafc
आह, मुझे अभी एहसास हुआ कि सरणी जावा में वस्तुएं नहीं हैं, इसलिए यदि आप केवल एक तर्क पारित करते हैं तो कोई अस्पष्टता नहीं है। धन्यवाद! :) – mik01aj