在 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
广告