.jpg)
以下方法中后面的 3 个点是什么意思?String
public void myMethod(String... strings) {
// method body
}

网友回答:
该特性称为varargs,它是Java 5中引入的一个特性。这意味着函数可以接收多个参数:String
myMethod("foo", "bar");
myMethod("foo", "bar", "baz");
myMethod(new String[]{"foo", "var", "baz"}); // you can even pass an array
然后,您可以将 var 用作数组:String
public void myMethod(String... strings) {
for (String whatever : strings) {
// do what ever you want
}
// the code above is equivalent to
for (int i = 0; i < strings.length; i++) {
// classical for. In this case you use strings[i]
}
}
这个答案在很大程度上借鉴了基斯瓦和洛伦佐的……也来自Graphain的评论。

网友回答:
这意味着零个或多个 String 对象(或它们的单个数组)可以作为该方法的参数传递。
请参阅此处的“任意数量的参数”部分:http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs
在您的示例中,您可以将其称为以下任一值:
myMethod(); // Likely useless, but possible
myMethod("one", "two", "three");
myMethod("solo");
myMethod(new String[]{"a", "b", "c"});
重要提示:以这种方式传递的参数始终是一个数组 – 即使只有一个数组。确保在方法主体中以这种方式处理它。
重要提示2:获取 的参数必须是方法签名中的最后一个。所以,没关系,但不行。...myMethod(int i, String... strings)myMethod(String... strings, int i)
感谢 Vash 在他的评论中的澄清。

网友回答:
是瓦拉格斯 ?
可变长度参数的缩写 varargs 是一项功能,它允许方法接受可变数量的参数(零个或更多)。使用 varargs,创建需要接受可变数量参数的方法变得简单。Java 5 中添加了变量参数的功能。
varargs 的语法
变量在数据类型后由三个省略号(三个点)分隔,其一般形式为
return_type method_name(data_type ... variableName){
}
对瓦拉格斯的需求
在Java 5之前,如果需要可变数量的参数,有两种方法可以处理它
如果方法可以采用的最大参数数很小且已知,则可以创建该方法的重载版本。
如果一个方法可以接受的最大参数数量很大或/和未知,那么方法是将这些参数放在一个数组中,并将它们传递给一个将数组作为参数的方法。
这两种方法容易出错——每次都构造一个参数数组并且难以维护——因为添加新参数可能会导致编写新的重载方法。
瓦拉格斯的优势
提供了一个更简单的选择。
更少的代码,因为无需编写重载的方法。
变量示例
public class VarargsExample {
public void displayData(String ... values){
System.out.println("Number of arguments passed " + values.length);
for(String s : values){
System.out.println(s + " ");
}
}
public static void main(String[] args) {
VarargsExample vObj = new VarargsExample();
// four args
vObj.displayData("var", "args", "are", "passed");
//three args
vObj.displayData("Three", "args", "passed");
// no-arg
vObj.displayData();
}
}
Output
Number of arguments passed 4
var
args
are
passed
Number of arguments passed 3
Three
args
passed
Number of arguments passed 0
从程序中可以看出,此处使用 length 来查找传递给该方法的参数数。这是可能的,因为 varargs 是作为数组隐式传递的。作为 varargs 传递的任何参数都存储在一个数组中,该数组由 varargs 的名称引用。在此程序中,数组名称为值。
另请注意,方法是使用不同数量的参数调用的,首先调用四个参数,然后调用三个参数,然后使用零参数。所有这些调用都由采用 varargs 的相同方法处理。
使用变量的限制
方法中可以使用 varargs 参数使用其他参数,但是在这种情况下,varargs 参数必须是方法声明的最后一个参数。
void displayValues(int a, int b, int … values) // OK
void displayValues(int a, int b, int … values, int c) // compiler error
varargs 的另一个限制是必须只有一个 varargs 参数。
void displayValues(int a, int b, int … values, int … moreValues) // Compiler error
重载变量方法
可以重载采用 varargs 参数的方法。
Varargs 方法可以通过以下方式重载 –
其变量参数的类型可以不同。
通过添加其他参数。
重载变量方法示例
public class OverloadingVarargsExp {
// Method which has string vararg parameter
public void displayData(String ... values){
System.out.println("Number of arguments passed " + values.length);
for(String s : values){
System.out.println(s + " ");
}
}
// Method which has int vararg parameter
public void displayData(int ... values){
System.out.println("Number of arguments passed " + values.length);
for(int i : values){
System.out.println(i + " ");
}
}
// Method with int vararg and one more string parameter
public void displayData(String a, int ... values){
System.out.println(" a " + a);
System.out.println("Number of arguments passed " + values.length);
for(int i : values){
System.out.println(i + " ");
}
}
public static void main(String[] args) {
OverloadingVarargsExp vObj = new OverloadingVarargsExp();
// four string args
vObj.displayData("var", "args", "are", "passed");
// two int args
vObj.displayData(10, 20);
// One String param and two int args
vObj.displayData("Test", 20, 30);
}
}
Output
Number of arguments passed 4
var
args
are
passed
Number of arguments passed 2
10
20
a Test
Number of arguments passed 2
20
30
瓦拉格斯和重载歧义
在某些情况下,调用可能是模棱两可的,而我们有重载的varargs方法。
让我们看一个例子
public class OverloadingVarargsExp {
// Method which has string vararg parameter
public void displayData(String ... values){
System.out.println("Number of arguments passed " + values.length);
for(String s : values){
System.out.println(s + " ");
}
}
// Method which has int vararg parameter
public void displayData(int ... values){
System.out.println("Number of arguments passed " + values.length);
for(int i : values){
System.out.println(i + " ");
}
}
public static void main(String[] args) {
OverloadingVarargsExp vObj = new OverloadingVarargsExp();
// four string args
vObj.displayData("var", "args", "are", "passed");
// two int args
vObj.displayData(10, 20);
// This call is ambiguous
vObj.displayData();
}
}
在这个程序中,当我们调用没有任何参数的 displayData() 方法时,它会抛出错误,因为编译器不确定此方法调用是针对还是displayData(String ... values)displayData(int ... values)
同样,如果我们有重载的方法,其中一个方法具有一种类型的方法,而另一个方法具有一个参数和相同类型的参数,那么我们也有歧义 – 作为 Exp –
和varargvarargdisplayData(int ... values)displayData(int a, int ... values)
这两种重载方法将始终具有歧义。
模板简介:该模板名称为【在 Java 中,参数类型旁边的 3 个点是什么意思?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。