public void add(int a,int ... b){

时间:2009-10-30 14:43:14

标签: java

有人能告诉我实际使用...数组方法声明吗? 它只是一种声明可选参数而不是传递空值的方法吗?

public void add(int a, int... b) {
 // do something
}

add(1);
add(1,2,3); 

5 个答案:

答案 0 :(得分:11)

String.format是一个非常好的实际例子。该方法不知道格式字符串中将出现多少格式化程序,因此它接受可变数量的参数,并且应该将格式化程序(格式字符串)与传递给方法的对象进行一对一映射

这不是一种声明选项参数而不是null的方法,因为它是声明一个可以处理多个参数的方法。基于我的示例,您可以编写一个sum方法,该方法接受可变数量的参数并将它们汇总在一起:

public int sum(int... ns)
{
    int sum = 0;
    for (int n : ns) {
        sum += n;
    }
    return sum;
}

这样,根据您当时的需要,您可以传入2,3,4或甚至100个数字。

答案 1 :(得分:3)

当您编写将使用可以将数组作为参数的函数的代码时,它是您的简写。

编写add(1,2,3,4);通常比编写add(new int[] {1,2,3,4});更容易,对吧?当以后需要由未来的程序员阅读和维护时,它也更加清晰。

以这种方式思考:你会调用哪个函数,每次都要创建一个数组的函数,或者你可以根据需要传入多个参数的函数?

答案 2 :(得分:3)

Formatter类是如此实用:

Formatter formatter = new Formatter(sb, Locale.US);
formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")

可以使用第一个参数传递任意数量的参数进行格式化,第一个参数是格式字符串本身。

答案 3 :(得分:0)

从您的示例中得出,您可以创建一个方法来获取传递给方法的所有整数的总和:

    public int sum(int a, int... b) {
    int sum = a;
    for (int i : b) {
        sum += i;
    }
    return sum;
}

答案 4 :(得分:0)

在varargs之前,需要使用任意数量的值创建数组的方法在调用方法之前将值放入数组中。这里的示例是MessageFormat类如何格式化用于查看的消息:

Object[] arguments = {
    new Integer(7),
    new Date(),
    "a disturbance in the Force"
};

String result = MessageFormat.format(
    "At {1,time} on {1,date}, there was {2} on planet "
     + "{0,number,integer}.", arguments);

仍然必须在数组中传递多个参数,但varargs功能会自动化并隐藏进程。此外,它与先前存在的API向上兼容。因此,例如,MessageFormat.format方法现在具有此声明:

public static String format(String pattern,
                            Object... arguments);

最终参数类型之后的三个句点表示最终参数可以作为数组或参数序列传递。 Varargs只能在最终参数位置使用。给定MessageFormat.format的新varargs声明,上面的调用可能会被以下更短和更甜的调用所取代:

String result = MessageFormat.format(
    "At {1,time} on {1,date}, there was {2} on planet "
    + "{0,number,integer}.",
    7, new Date(), "a disturbance in the Force");

那么什么时候应该使用varargs?作为客户,只要API提供它们,您就应该利用它们。核心API中的重要用途包括反射,消息格式化和新的printf工具。作为一名API设计师,只有在收益真正引人注目的情况下,才应谨慎使用它们。一般来说,你不应该重载varargs方法,否则程序员很难弄清楚调用哪些重载。

来自:http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

相关问题