Java一个方法使用可变参数技巧

很久没有写日志了,最近由于项目紧张在研究一些Java的反射机制,想利用该机制更好的完善和封装项目还有代码,今天在研究反射时,沈阳斌子遇到一个问题就是封装一个方法时有可变参数的问题,经上网查找找到如下方式和技巧。

编写Java程序时,经常会遇到一个方法需要多个参数的情况。例如一个求和方法:

public int add(int[] list){
   int sum = 0;
   for (int i=0;i<list.length;i++)
    sum += list[i];
   return sum;
}

重载的方式:

public int add(int a,int b){
   return a + b;
}

public int add(int a,int b,int c){
   return a + b + c;
}

JDK5优化了for循环,可以利用它来写更简洁的代码:

public int add(int... list){
   int sum = 0;
   for (int item:list)
    sum += item;
   return sum;
}

技巧:

add(int... list) ,三个点代表的是数量可变的参数,相信这点很多学Java的人都不知道。

另外需要注意的一点是,可变参数必须放在所有参数的最后,例如

add(int... list,int a) 是错误的,但是add(int a,int... list)就是正确的。

资料参考:http://www.cnblogs.com/yezhenhan/archive/2012/08/08/2628835.html

Java一个方法使用可变参数技巧

时间: 2024-07-31 19:01:05

Java一个方法使用可变参数技巧的相关文章

Java方法的可变参数个数

什么是可变参数 可变参数,具体来说是, 1.传递参数的时候可以传递0个.1个.2个--n个. 2.也可以传递一个数组. 3.可变参数,必须是方法的最后一个参数. 示例 //业务逻辑类 /** * 根据 Workplandetailid获取任务对象 * * @param detailId * @return */ public Taskinfo findByWorkplandetailid(String detailId) throws Exception { StringBuffer strbu

JAVA笔记4__static关键字/对象数组/foreach/方法的可变参数

/** * static关键字:修饰属性(实质就是全局变量).方法(无需本类的对象即可调用此方法).类. * 1.static方法只能调用static方法 * 2.static方法只能访问static数据 * 3.static方法不能以任何方式引用this或super */ public class Main { public static void main(String[] args) { A a = new A(); a.val = 2; A a1 = new A(); a1.val =

java中形参的可变参数的定义(如String... args) .

如果有下面的一个笔试题: 已知我们有如下的调用关系 logIt("log message 1 "); logIt("log message2","log message3"); logIt("log message4","log message5","log message6"); 请问下面的答案中哪个是正确的 A. public void logIt(String * msgs) B.

java基础-java与c#的可变参数

正文 可变参数,必须最为参数的最后一个参数:可变参数只能有一个: c#可变参数例子: class Program { static void Main(string[] args) { Test t = new Test(); t.say("li", "wang"); Console.Read(); } } class Test { int num = 0; public void say(params string[] name) { foreach (strin

黑马程序员-----集合框架类(四) 高级for循环、方法的可变参数及静态导入

1.1 高级for循环(示例1) 格式:for(数据类型 变量名 : 被遍历的集合(Collection)或者数组){ } 对集合进行遍历.只能获取集合元素.但是不能对集合进行操作. 迭代器除了遍历,还可以进行remove集合中元素的动作.如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作. 1.1.2 传统for和高级for有什么区别呢? 高级for有一个局限性.必须有被遍历的目标. 1 示例1: 2 import java.util.*; 3 4 class For

java新特性之可变参数

public class NewDemo01 {     public static void main(String[] args) {         System.out.print("No args(fun()):");         fun();         System.out.print("\n one args(fun()):");         fun(1);         System.out.print("\n five a

Java方法的可变参数

1 class Demo 2 { 3 public static int sum(int ... data) { //此处可以传递一个数组,也可以是多个参数 4 int sum = 0; 5 for (int i : data) 6 sum = sum + i; 7 return sum; 8 } 9 } 10 public class Variable { 11 public static void main(String[] args) { 12 System.out.println(Dem

通过Java发射机制调用可变参数函数

1.获取可变参数的函数 获取可变参数的函数与获取参数类型为数组类型一样. clazz.getMethod("test", Object[].class); 其中Object为可变参数或者数组的数据类型 例如: public void test(String ... params){ ... } 则获取该可变参数的函数如下: Class clazz = Class.forName("com.demo003.MainThread"); Method method = c

方法的可变参数

当几个方法对相同类型的元素(个数不同)进行相同的操作时,首先有两种方式 1.定义不同个数变量的参数列表的重载函数,例如: public void show(int a){} public void show(int a, int b){} public void show(int a, int b, int c){} 2.定义一个参数为数组的函数,每次操作时创建不同的数组,例如: public void show(int[] a){} int[] a = {1,2}; show(a); int[