什么是...在方法签名

问题描述:

我已经看到它第一次在方法签名...什么是...在方法签名

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

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

而且GraphData只是与getter和setter POJO。为什么.class文件显示GraphData... _graphData而不是GraphData _graphData ??

+0

可能重复(http://stackoverflow.com/questions/1656901/varargs-and-the-argument) – 2012-01-10 12:34:17

这是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){

}

+1

不,它不是。它*几乎*,但你可以调用'addGraphData()'。在这种情况下'_graphData'数组将是'null';它会*不会*空你可能会期望的。 – user268396 2012-01-10 12:36:52

+0

同意,可变参数在某些方面与数组不同,但它几乎相同:) – 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"});