可变参数如何在Java项目中使用

  介绍

今天就跟大家聊聊有关可变参数如何在Java项目中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强> 1。用数组包裹实参

“用数组包裹实参”的做法可以分成三步:首先,为这个方法定义一个数组型的参数,然后在调用时,生成一个包含了所有要传递的实参的数组;最后,把这个数组作为一个实参传递过去。

这种做法可以有效的达到“让方法可以接受个数可变的参数”的目的,只是调用时的形式不够简单。

J2SE 1.5中提供了Varargs机制,允许直接定义能和多个实参相匹配的形参,从而,可以用一种更简单的方式,来传递个数可变的实参。

<强>可变参数的含义

大体说来,“Varargs”是“变量数量的参数”的意思。有时候也被简单的称为“变量参数”,不过因为这一种叫法没有说明是什么东西可变,所以意义稍微有点模糊。

<强> 2。定义实参个数可变的方法

只要在一个形参的“类型”与“参数名”之间加上三个连续的“。”(即“…”,英文里的句中省略号),就可以让它和不确定个实参相匹配。而一个带有这样的形参的方法,就是一个实参个数可变的方法。

<李>

清单1:一个实参个数可变的方法

private  static  int 综述(int…,值),{   }

注意,只有最后一个形参才能被定义成“能和不确定个实参相匹配”的,因此,一个方法里只能有一个这样的形参。另外,如果这个方法还有其它的形参,要把它们放到前面的位置上。

编译器会在背地里把这最后一个形参转化为一个数组形参,并在编译出的类文件里作上一个记号,表明这是个实参个数可变的方法。

<李>

清单2:实参个数可变的方法的秘密形态

private  static  int 综述(int[],值),{   }

由于存在着这样的转化,所以不能再为这个类定义一个和转化后的方法签名一致的方法。

<李>

清单3:会导致编译错误的组合

private  static  int 综述(int…,值),{   }   private  static  int 综述(int[],值),{   }

<强> 3。调用实参个数可变的方法

只要把要传递的实参逐一写到相应的位置上,就可以调用一个实参个数可变的方法,不需要其它的步骤。

<李>

清单4:可以传递若干个实参

总结(1,3,5,7);

在背地里,编译器会把这种调用过程转化为用“数组包裹实参”的形式:

<李>

清单5:偷偷出现的数组创建

总结(new  int [] {1,, 2,, 3,, 4});

另外,这里说的“不确定个“也包括零个,所以这样的调用也是合乎情理的:

<李>

清单6:也可以传递零个实参

总结();

这种调用方法被编译器秘密转化之后的效果,则等同于这样:

<李>

清单7:零实参对应空数组

总结(new  int [] {});

注意这时传递过去的是一个空数组,而不是null。这样就可以采取统一的形式来处理,而不必检测到底属于哪种情况。

<强> 4。处理个数可变的实参

处理个数可变的实参的办法,和处理数组实参的办法基本相同。所有的实参,都被保存到一个和形参同名的数组里,根据实际的需要,把这个数组里的元素读出之后,要蒸要煮,就可以随意了。

<李>

清单8:处理收到的实参们

private  static  int 综述(int…,值),{   ,int  sum =, 0;   ,for  (int 小姐:=,0;,小姐:& lt;, values.length;,我+ +),{   +=,sum 价值(我);   ,}   ,return 总和;   }

<强> 5。转发个数可变的实参

有时候,在接受了一组个数可变的实参之后,还要把它们传递给另一个实参个数可变的方法,因为编码时无法知道接受来的这一组实参的数目,所以“把它们逐一写到该出现的位置上去”的做法并不可行。不过,这并不意味着这是个不可完成的任务,因为还有另外一种办法,可以用来调用实参个数可变的方法。

可变参数如何在Java项目中使用