什么是…在方法签名中

我第一次看到它...在方法签名中。

我试图访问.class文件。 它有一个定义如下的方法

 public void addGraphData(GraphData... _graphData) { } 

而GraphData只不过是带有getter和setter的POJO。 为什么.class文件显示GraphData... _graphData而不是GraphData _graphData

它是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”如何转换为数组。

该function称为Varargs

它允许您为方法提供随机数量的参数。

这是varargs语法: http : //docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

它被视为GraphData [],它可以作为可扩展参数即时构建。 Arrays.asList()是另一个这样的例子。

这个符号的同义词

public void addGraphData(GraphData [] _graphData){

}

...表示Java中的varargs[vararg]属性指定该方法采用可变数量的参数。 要实现此目的,最后一个参数必须是VARIANT类型的安全数组,其中包含所有剩余参数:

 [vararg [, optional-attributes]] return-type function-name( [optional-param-attributes] param-list, SAFEARRAY(VARIANT) last-param-name); 

varargs语法基本上允许您指定有可能的参数,对吧? 他们可以在那里,或者不能在那里。 这就是三个点的目的。 调用方法时,可以使用或不使用这些参数调用它。 这样做是为了避免必须将数组传递给方法。

看看这个 :

请参阅何时在Java中使用varargs?

 final public class Main { private void show(int []a) { for(int i=0;i 

出于这个原因,在重载方法时基本上不推荐使用varargs


System.out.printf();varargs一个例子,定义如下。

 public PrintStream printf(String format, Object ... args) { return format(format, args); } 

format -格式字符串语法中描述的格式字符串

args -格式字符串中格式说明符引用的参数。 如果参数多于格式说明符,则忽略额外参数。 参数的数量是可变的,可以为零。 参数的最大数量受Java虚拟机规范定义的Java数组的最大维数限制。 null参数的行为取决于转换。

...表示可变长度参数列表。

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