如果需要设计一个方法的参数为可变的,即参数的数目为可变的同一类型,一般有两种方法实现:
第一种为参数为一个数组,如下:
ChangeParameter为一个类
public class ChangeParameter {
Object[] array;
String[] args;
int a;
public ChangeParameter(){
}
public ChangeParameter(Object[] array){
this.array = array;
}
//新机制
public void newMethodChangeParameter(Object... args){
this.array = args;
}
/*
* 多重可变参数,重载
* 第一个参数必须是整型,而后面的参数则必须是String型
*/
public void newMethodChangeParameter(int a,String... args){
this.a = a;
this.args = args;
}
public void print(){
for(Object a:array){
System.out.print("Array: " + a + " ");
}
System.out.println();
if(args!=null && this.args.length != 0){
System.out.println("Int:"+ a);
for(String a:args){
System.out.print("args: " + a + " ");
}
System.out.println();
}
}
}
实现:
//用于测试,没什么用处
class A{}
public class MainTest {
/**
* @param args
*/
public static void main(String[] args) {
//老方法
new ChangeParameter(new Object[]{ "a" , "b", "c" }).print();
new ChangeParameter(new Object[]{ 2 , "b", "c" }).print();
new ChangeParameter(new Object[]{ new A(), new A(), new A() }).print();
}
}
输出如下:
Array: a Array: b Array: c
Array: 2 Array: b Array: c
Array: ChangePara.A@dc8569 Array: ChangePara.A@1bab50a Array: ChangePara.A@c3c749
这种方法传输的是一个数组,但在实例化方法的时候较为复杂,且不易操作;
第二种方法:
调用如下;
//新方法
ChangeParameter cp = new ChangeParameter();
cp.newMethodChangeParameter("Na","Nb");
cp.print();
cp.newMethodChangeParameter(1,"tt","rr");
cp.print();
//第一个参数为整数,后面的则必须为String类型
cp.newMethodChangeParameter(77, "TEST","CAT","BUT");
cp.print();
这种方法相对来说实现简单,且灵活性更强。但是后面的可变参数(String... args)必须放到参数的最后一个位置,并且一个方法只能有一个可变参数。其实可变参数也是数组,本质上属于数组,所以在ChangeParameter类中可以直接使用一个数组来引用。