利用反射编写扩充任意类型数组的方法

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

你可能感兴趣的:(java基础)