可能重复:
What does “…” mean in Java?
Java array argument “declaration” syntax
任何人都可以确认我在下面的方法调用中看到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中看过...
。
答案 0 :(得分:8)
它等同于Object[]
,但允许调用者一次只指定一个值作为参数,编译器将创建一个数组。所以这个电话:
setValues(statement, arg1, arg2, arg3);
相当于
setValues(statement, new Object[] { arg1, arg2, arg3 });
有关详细信息,请参阅documentation for the varargs feature(Java 5中介绍)。
答案 1 :(得分:3)
来自Java教程(Passing Information to a Method or Constructor):
任意参数数量
您可以使用名为varargs的构造 传递任意数量的值 一种方法。你使用varargs 不知道有多少特别的 参数类型将传递给 方法。这是创建一个快捷方式的捷径 手动数组(以前的方法 本来可以使用varargs而不是 数组)。要使用varargs,请按照 一个最后一个参数的类型 省略号(三点,......),然后是 空间和参数名称。该 然后可以使用any调用方法 该参数的编号,包括 无。
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
}
你可以看到 在方法内部,角落是 像阵列一样对待该方法可以 被称为使用数组或使用 一系列论据。代码在 方法体会对待 参数在任何一种情况下都是一个数组。
答案 2 :(得分:1)
您正在查看的是varargs参数。可以找到有关它的文档here。
Varargs相当于一个对象数组,但是有一些语法糖可以让调用该方法更容易。所以旧方法是(这段代码来自上面的文档):
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,你可以写:
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");
请注意,autoboxing有助于将int 7转换为new Integer(7)
,而无需您明确声明它。