我在方法签名中第一次看到...
。
我试图访问.class文件。它有一个定义如下的方法
public void addGraphData(GraphData... _graphData) {
}
而GraphData只不过是带有getter和setter的POJO。为什么.class文件显示GraphData... _graphData
而不是GraphData _graphData
??
答案 0 :(得分:5)
该功能称为Varargs
它允许您为方法提供随机数量的参数。
答案 1 :(得分:3)
它是varargs,只能在参数列表中最后使用。最后一个参数可以包含多个对象。
public class C {
int i;
String[] s;
public C(int i, String... s){
this.i = i;
this.s=s;
}
}
new C(4,"a","b") // will be transformed to int and String[]
了解“a”和“b”如何转换为数组。
答案 2 :(得分:1)
这是varargs语法:http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html
它被视为GraphData [],它可以作为可扩展参数动态构建。 Arrays.asList()是另一个这样的例子。
答案 3 :(得分:0)
这个符号
的同义词public void addGraphData(GraphData [] _graphData){
}
答案 4 :(得分:0)
...
表示Java中的varargs
。
[vararg]
属性指定该方法采用可变数量的参数。要实现此目的,最后一个参数必须是VARIANT类型的安全数组,其中包含所有剩余参数:
[vararg [, optional-attributes]] return-type function-name(
[optional-param-attributes] param-list,
SAFEARRAY(VARIANT) last-param-name);
varargs语法基本上允许你指定有可能的参数,对吗?他们可以在那里,或者不能在那里。这就是三个点的目的。调用方法时,可以使用或不使用这些参数调用它。这样做是为了避免必须将数组传递给方法。
查看this:
请参阅When do you use varargs in Java?
final public class Main
{
private void show(int []a)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+"\t");
}
}
private void show(Object...a)
{
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+"\t");
}
System.out.println("\nvarargs called");
}
public static void main(String... args) //See also here.
{
int[]temp=new int[]{1,2,3,4};
Main main=new Main();
main.show(temp);
main.show(); //<-- This is possible.
}
}
由于这个原因,在重载方法时基本上不推荐使用varargs
。
System.out.printf();
是varargs
的示例,定义如下。
public PrintStream printf(String format, Object ... args)
{
return format(format, args);
}
格式 - 格式字符串语法
中描述的格式字符串args - 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略额外参数。参数的数量是可变的,可以为零。参数的最大数量受Java虚拟机规范定义的Java数组的最大维数限制。 null参数的行为取决于转换。
答案 5 :(得分:0)
...
表示可变长度参数列表。
printStrings(String... s){
//internally s is an array with the parameters
for(int i = 0; i < s.length;++i)
System.out.print(s[i]);
}
printStrings("A","B","C","D");
//this is done by the compiler
printStrings(new String[]{"A","B","C","D"});