एक विधि के लिए जावा चर संख्या या तर्क


146

क्या यह एक विधि घोषित करना संभव है जो मापदंडों की एक चर संख्या की अनुमति देगा?

परिभाषा में प्रयुक्त प्रतीकवाद क्या इंगित करता है कि विधि को मापदंडों की एक चर संख्या की अनुमति देनी चाहिए?

उत्तर: वैराग


11
इसके होमवर्क के बाद से, हम आपके प्रश्न को जानना नहीं चाहते हैं, हम सिर्फ यह जानना चाहते हैं कि आप सीख रहे हैं।
एचडीवी १

जवाबों:


274

यह सही है। आप इसके बारे में अधिक जानकारी प्राप्त कर सकते हैं varargs पर ओरेकल गाइड

यहाँ एक उदाहरण है:

void foo(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

जिसे कहा जा सकता है

foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.

1
क्या विभिन्न प्रकार के पैरामीटर्स करना संभव है? उदा। (स्ट्रिंग ... strs, int ... ints)। किसी भी क्रम में किसी भी प्रकार के तर्क के बारे में क्या?
trusktr

5
@trusktr: यदि आप कोई वस्तु चाहते हैं, तो उपयोग करें Object...
बालुसक

2
@trusktr नहीं, आदिम वस्तुएं नहीं हैं। यहाँ अंतर का एक बड़ा विवरण है: programmerinterview.com/index.php/java-questions/…
डिक लुकास

5
@ रीचर्ड: ऑटोबॉक्सिंग कीObject... args वजह से प्राइमरी के साथ काम करना होगा ।
सुमित

1
@StevenVascellaro: मेरा मानना ​​है कि तर्कों को एक सरणी की तरह संभाला जाता है, इसलिए आप शायद बस कर सकते हैंvarargs.length
LMD

15
Variable number of arguments

एक विधि के लिए चर संख्याओं को पारित करना संभव है। हालाँकि, कुछ प्रतिबंध हैं:

  • मापदंडों की चर संख्या सभी एक ही प्रकार की होनी चाहिए
  • उन्हें विधि के भीतर एक सरणी के रूप में माना जाता है
  • वे विधि का अंतिम पैरामीटर होना चाहिए

इन प्रतिबंधों को समझने के लिए, विधि पर विचार करें, निम्नलिखित कोड स्निपेट में, पूर्णांक की सूची में सबसे बड़ा पूर्णांक वापस करने के लिए उपयोग किया जाता है:

private static int largest(int... numbers) {
     int currentLargest = numbers[0];
     for (int number : numbers) {
        if (number > currentLargest) {
            currentLargest = number;
        }
     }
     return currentLargest;
}

स्रोत ओरेकल प्रमाणित एसोसिएट जावा एसई 7 प्रोग्रामर स्टडी गाइड 2012



10

विभिन्न प्रकार के तर्कों के लिए, 3-बिंदु हैं :

public void foo(Object... x) {
    String myVar1  = x.length > 0 ? (String)x[0]  : "Hello";
    int myVar2     = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
} 

फिर इसे कॉल करें

foo("Hii"); 
foo("Hii", 146); 

सुरक्षा के लिए, इस तरह का उपयोग करें:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

इस दृष्टिकोण का मुख्य दोष यह है कि यदि वैकल्पिक पैरामीटर विभिन्न प्रकार के हैं तो आप स्थैतिक प्रकार की जाँच खो देते हैं। कृपया, अधिक विविधताएँ देखें ।



0

हाँ जावा vargsविधि पैरामीटर में अनुमति देता है।

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.