什么是…在方法签名中
我第一次看到它...
在方法签名中。
我试图访问.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"});