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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值