我正在尝试从教程中读取一些Java代码,我不明白这一行:
public Weatherman(Integer... zips) {
答案 0 :(得分:13)
这些是“varargs”,语法糖,允许您通过以下方式调用构造函数:
new Weatherman()
new Weatherman(98115);
new Weatherman(98115, 98072);
new Weatherman(new Integer[0]);
在封面下,参数作为数组传递给构造函数,但是您不需要构造一个数组来调用它。
答案 1 :(得分:5)
这是一个“vararg”。它可以处理任意数量的Integer
个参数,即
new Weatherman(1);
和
一样有效new Weatherman();
或
new Weatherman(1, 7, 12);
在方法中,您可以将参数作为Integer
数组访问。
答案 2 :(得分:3)
您正在看Java的varargs feature,自Java 1.5以来就可以使用。
zips是构造函数中的Integer数组,但是可以使用可变数量的参数调用构造函数。
答案 3 :(得分:2)
您可以使用名为varargs的构造将任意数量的值传递给方法。当您不知道将多少特定类型的参数传递给该方法时,您可以使用varargs。这是手动创建数组的快捷方式(前一种方法可能使用了varargs而不是数组)。
要使用varargs,您可以通过省略号(三个点,...),一个空格和参数名称来跟踪最后一个参数的类型。然后可以使用任何数量的参数调用该方法,包括none。
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
}
你可以看到,在方法内部,角被视为数组。可以使用数组或参数序列调用该方法。在任何一种情况下,方法体中的代码都会将参数视为数组。
答案 4 :(得分:0)
如果我记得很好,当有可变数量的参数
时会使用它