我已經看到它第一次在方法簽名...
。什麼是...在方法簽名
我試圖訪問.class文件。它有一個方法定義如下
public void addGraphData(GraphData... _graphData) {
}
而且GraphData只是與getter和setter POJO。爲什麼.class文件顯示GraphData... _graphData
而不是GraphData _graphData
??
我已經看到它第一次在方法簽名...
。什麼是...在方法簽名
我試圖訪問.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」是如何轉換成數組的。
即所述可變參數的語法:http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html
它當作一個GraphData []可以是建立在飛行可擴展參數。 Arrays.asList()是另一個這樣的例子。
該功能被稱爲Varargs
它可以讓你提供的參數的隨機數的方法。
這個符號的代名詞
公共無效addGraphData(GraphData [] _graphData){
}
不,它不是。它*幾乎*,但你可以調用'addGraphData()'。在這種情況下'_graphData'數組將是'null';它會*不會*空你可能會期望的。 – user268396 2012-01-10 12:36:52
同意,可變參數在某些方面與數組不同,但它幾乎相同:) – mishadoff 2012-01-10 12:39:36
...
在Java中表示varargs
。 [vararg]
屬性指定該方法採用可變數量的參數。要做到這一點,最後一個參數必須是VARIANT類型的安全數組包含所有剩餘的參數:
[vararg [, optional-attributes]] return-type function-name(
[optional-param-attributes] param-list,
SAFEARRAY(VARIANT) last-param-name);
的可變參數的語法基本上,您可以指定有可能的參數,對不對?他們可以在那裏,或不能在那裏。這是三個點的目的。當您調用該方法時,可以使用或不使用這些參數進行調用。這樣做是爲了避免將數組傳遞給方法。
看一看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參數上的行爲取決於轉換。
...
表示可變長度參數列表。 [可變參數和 '...' 的說法]的
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"});
可能重複(http://stackoverflow.com/questions/1656901/varargs-and-the-argument) – 2012-01-10 12:34:17