如下所示:
public class Percolation {
private int gridSize
private int[] openState //数组,期望长度gridSize*gridSize
private int[] UFstate //数组,期望长度gridSize*gridSize
public Percolation(int n){ // create n-by-n grid, with all sites blocked
gridSize = n
}
private void setOpenState(){
this.openState = new int[this.gridSize * this.gridSize]
}
private void setUFstate(){
this.UFstate = new int[this.gridSize * this.gridSize]
}
private int[] getOpenState(){
return this.openState
}
private int[] getUFstate(){
return this.UFstate
}
public static void main(String[] args){
Percolation per = new Percolation(10)
per.setOpenState()
per.setUFstate()
System.out.println(per.getOpenState())
}
}
首先,可变长度参数列表就是一个数组。观察Method
类的方法Object invoke(Object obj, Object... args)
可以发现 参数obj是要执行的对象,args是方法的参数。
method.invoke(example, parameters)的意思是执行对象example的指定方法,这个方法接收参数为数组parameters中的元素。
方法myMethod只有一个参数:字符串数组。如果method.invoke(example, new String[] { "卧槽,", "牛逼! ", "你麻痹真强" }),系统会以为你要执行myMethod(String str1,String str2,String str3)。但是Example类没有这个方法,所以会报错。如果invoke(example, new Object[] {new String[] {"卧槽,","牛逼! ","你真强"}}),就是告诉系统,你要找的是myMethod(String[] strs),由于可变参数等价于数组,于是找到了了Example类中的myMethod(String... strings)。