Java变量
时间:2020-02-23 14:37:00 来源:igfitidea点击:
Java varargs是Java 1.5中引入的。
Java varargs也称为Java变量参数。
Java变量
Java中的varargs使方法可以接受可变数量的参数。
我们在方法签名中使用三个点(…)(也称为省略号)以使其接受可变参数。
例如;
public static int sum(int i, int...js ){ //do something }
关于Java中的varargs的要点
关于Java中的varargs的几点知识是:
该方法中只能有一个可变参数。
方法的最后一个参数只能是varargs。
根据Java文档,我们不应重载varargs方法。
我们将了解为什么它不是一个好主意。
java varargs如何工作?
当我们调用带有可变参数的方法时,java编译器会从左到右匹配参数。
到达最后一个varargs参数后,它将创建剩余参数的数组并将其传递给方法。
实际上,varargs参数的行为类似于指定类型的数组。
//method with variable arguments public static int sum(int i, int...js ){ int sum = i; for(int x : js){ sum+=x; } return sum; } //method with same implementation as sum with array as argument public static int sumArray(int i, int[] js ){ int sum = i; for(int x : js){ sum+=x; } return sum; }
如果同时查看sum和sumArray方法,您会发现实现主体是完全相同的。
因此,当API提供它们时,我们应该使用varargs,例如java.io.PrintStream.printf()方法,但我们不应该将其替代数组。
为什么我们不应该重载varargs方法
让我们看一个示例,为什么重载java varargs方法不是一个好主意。
package com.theitroad.misc; public class VarargsExample { public static void main(String[] args) { System.out.println(sum(1)); System.out.println(sum(1,2)); //compiler error, ambiguous method } public static int sum(int i, int...js ){ System.out.println("sum1 called"); int sum = i; for(int x : js){ sum+=x; } return sum; } public static int sum(int i, int k, Object...js ){ System.out.println("sum2 called"); int sum = i+k; for(Object x : js){ sum+=1; } return sum; } }
在上面的示例中,您会注意到当我们使用varargs重载方法时,编译器不会抱怨。
但是,当我们尝试使用它时,编译器在映射第二个参数时会感到困惑。
如果只有一个参数,则编译器很聪明地使用第一个方法,因为它可以使用最少一个参数,但是第二个方法至少需要两个参数。
Eclipse的下图显示了错误消息,因为对于类型为VarargsExample的方法,sum(int,int [])方法不明确。