"Object..."是什么意思?

4

可能的重复问题:
Java中“…”的含义是什么?
Java数组参数的“声明”语法

请问有人能确认我在下面的方法调用中是否正确地看到了Object...参数:

public static void setValues(PreparedStatement preparedStatement, Object... values)
    throws SQLException
{
    for (int i = 0; i < values.length; i++) {
        preparedStatement.setObject(i + 1, values[i]);
    }
}    

作为 Object 类型的数组?我不记得在 Java 中曾经看到过 ...

@Jigor Joshi:那个问题已经被关闭了,因为它是重复的。 - Bobby
感谢这里的回答者。在Java中我从未见过...。 - Mr Morgan
3个回答

8

它相当于Object[],但允许调用者一次一个参数地指定值,并且编译器将创建一个数组。因此,这个调用:

setValues(statement, arg1, arg2, arg3);

等同于

setValues(statement, new Object[] { arg1, arg2, arg3 });

请参考Java 5中引入的可变参数特性的文档,以获取更多信息。


3

来自Java教程(向方法或构造函数传递信息):

任意数量的参数

您可以使用一个叫做可变参数的结构 将任意数量的值传递给方法。当您不知道将传递多少个特定类型的参数时,可以使用可变参数。这是一种快捷方式,可以手动创建数组(上一个方法可以使用可变参数而不是数组)。要使用可变参数,您需要在最后一个参数的类型之后跟着省略号(三个点,...),然后是空格和参数名。然后可以使用任意数量的该参数调用该方法,包括零个。

public Polygon polygonFrom(Point... corners) {
    int numberOfSides = corners.length;
    double squareOfSide1, lengthOfSide1;
    squareOfSide1 = (corners[1].x - corners[0].x)*(corners[1].x - corners[0].x) 
            + (corners[1].y - corners[0].y)*(corners[1].y - corners[0].y) ;
    lengthOfSide1 = Math.sqrt(squareOfSide1);
    // more method body code follows that creates 
    // and returns a polygon connecting the Points
}

你可以看到,在该方法内,corners 被视为一个数组。该方法可以使用数组或一系列参数进行调用。在方法体中的代码将在任一情况下将该参数视为一个数组。

1
你所看到的是一个可变参数。关于它的文档可以在这里找到。
可变参数相当于一个对象数组,但有一些语法糖使得调用该方法更加容易。因此,旧的方式是(这段代码来自上面的文档):
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);

使用可变参数,您可以编写:

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");

请注意,自动装箱可以帮助将 int 7 转换为 new Integer(7),而无需您显式声明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接