在 Java 中使用可变参数 (varargs) 时,有哪些规则需要遵守?


从 JSE 1.5 开始,您可以将可变数量的值作为参数传递给方法。这些参数被称为可变参数 (varargs),它们由三个点 (...) 表示。

语法

public myMethod(int ... a) {
   // method body
}

在 Java 中使用可变参数的规则

  • 每个方法只能有一个可变参数。如果您尝试使用多个可变参数,则会生成编译时错误。

Learn Java in-depth with real-world projects through our Java certification course. Enroll and become a certified expert to boost your career.

示例

在下面的 Java 示例中,我们尝试从 sample() 方法接受两个可变参数。

public class VarargsExample{
   void demoMethod(int... ages), String... names) {
      for (int arg: ages) {
         System.out.println(arg);
      }
   }
}

编译时错误

编译时,上述程序会生成以下错误:

VarargsExample.java:2: error: ')' expected
   void demoMethod(int... ages, String... names) {
                              ^
VarargsExample.java:2: error: <identifier> expected
   void demoMethod(int... ages, String... names) {
                                       ^
VarargsExample.java:2: error: <identifier> expected
   void demoMethod(int... ages, String... names) {
                                               ^
3 errors
  • 在方法的参数列表中,可变参数必须是最后一个。否则,将生成编译时错误。

示例

在下面的示例中,VarargsExample 类有一个名为 demoMethod() 的方法,它接受 3 个参数:一个可变参数、一个字符串和一个整数。

这里我们将可变参数放在参数列表的第一个位置。

public class VarargsExample{
   void demoMethod(int... marks, String name, int age) {
      System.out.println();
      System.out.println("Name: "+name);
      System.out.println("Age: "+age);
      System.out.print("Marks: ");
      for (int m: marks) {
         System.out.print(m+" ");
      }
   }
}

编译时错误

编译时,上述程序会生成以下错误。

VarargsExample.java:2: error: ')' expected
   void demoMethod(int... marks, String name, int age) {
                            ^
VarargsExample.java:2: error: <identifier> expected
   void demoMethod(int... marks, String name, int age) {
                                            ^
VarargsExample.java:2: error: <identifier> expected
   void demoMethod(int... marks, String name, int age) {
                                                     ^
3 errors

如果您在 Eclipse 中编译相同的代码,它会生成一个(相同的)错误,提示可变参数应该放在列表的最后,如下所示:

如果您想使此程序运行,则需要将可变参数放在方法参数列表的末尾。

public class VarargsExample{
   void demoMethod(String name, int age, int... marks) {
      System.out.println();
      System.out.println("Name: "+name);
      System.out.println("Age: "+age);
      System.out.print("Marks: ");
      for (int m: marks) {
         System.out.print(m+" ");
      }
   }
   public static void main(String args[] ){
      VarargsExample obj = new VarargsExample();
      obj.demoMethod("Krishna", 23, 90, 95, 80, 69 );
      obj.demoMethod("Vishnu", 22, 91, 75, 94 );
      obj.demoMethod("Kasyap", 25, 85, 82);
      obj.demoMethod("Vani", 25, 93);
   }
}

输出

Name: Krishna
Age: 23
Marks: 90 95 80 69
Name: Vishnu
Age: 22
Marks: 91 75 94
Name: Kasyap
Age: 25
Marks: 85 82
Name: Vani
Age: 25
Marks: 93

更新于:2019-07-30

235 次浏览

启动您的 职业生涯

完成课程获得认证

开始学习
广告