package com.zhy.reflect;
import java.lang.reflect.Array;
/**
* 利用反射编写扩充任意类型数组的方法,关键是java.lang.reflect包中的Array可以动态创建数组
* 2018/7/8
* @author zhy
*
*/
public class ArrayCopyMethod {
public static void main(String[] args) {
int[] num = new int[]{1,2,3};
int[] newNum = (int[])copyOf(num, num.length*2 + 1);
String[] str = {"asd","grf","asg"};
String[] newStr = (String[])copyOf(str,str.length*2 + 1);
System.out.println("num长度" + num.length + " newNum的长度" + newNum.length);
System.out.println("str长度" + str.length + " newStr的长度" + newStr.length);
}
//copyeOf的参数类型声明为Object,因为整数数组类型int[]可以转换成Object而不能转换成O bject[]
public static Object copyOf(Object object, int newLength){
Class cl = object.getClass();
//判断该对象是否为数组,若不是则返回null
if(!cl.isArray()) return null;
//获得该数组的类型的Class对象
Class componentType = cl.getComponentType();
//获得该数组的长度
int length = Array.getLength(object);
//利用反射动态创建新数组
Object newArray = Array.newInstance(componentType, newLength);
//调用系统的数组复制方法
System.arraycopy(object, 0, newArray, 0, Math.min(length, newLength));
return newArray;
}
}
结果:扩充成功
num长度3 newNum的长度7
str长度3 newStr的长度7