使用反射增加数组的大小

下面方法是用来扩展任意类型的数组,而不仅仅是对象数组。该方法主要是通过反射机制实现的。

增加对象数组大小一般分为以几步:

(1)首先,获取原始数组的类对象;

(2)其次,确认它是一个数组;

(3)再次,使用Class类的getComponentType方法确定数组对应的类型;

(4)最后,按需求创建目标对象,并将原始数组中的对象拷贝到目标数组中。

	/**返回的数组类型是指定的类型**/
	private static Object goodArrayCopy(Object a){
		Class<?> c = a.getClass();
		/**判断传入参数是否为数组**/
		if(!c.isArray()) return null;
		/**获取数组对应的类型**/
		Class<?> componentType = c.getComponentType();
		/**获取原始数组长度**/
		int len = Array.getLength(a);
		/**新数组长度,可以自定义设置**/
		int newlen = len * 11 / 10 + 10;
		/**创建新数组**/
		Object newArray = Array.newInstance(componentType, newlen);
		/**将原始数组对象拷贝到新的数组中**/
		System.arraycopy(a, 0, newArray, 0, len);
		return newArray;
	}


下面的方法也是增加数组大小,其传入的参数是object[],返回的对象也是object[],但是返回值的类型不再是原始的类型,而是Object。如果原始的的数组为int[]类型,最后返回的object[]数组将无法转为int[]类型数组。所以,用方法来增加数组的大小是不可靠的。

	/**返回数组类型是Object[] 而不是指定的类型**/
	private static Object[] badArrayCopy(Object[] a){
		int newlen = a.length * 11 / 10 + 10;
		Object[] newArray = new Object[newlen];
		System.arraycopy(a, 0, newArray, 0, a.length);
		return newArray;
	}

如果只是希望扩大数组,直接利用Arrays类的copyOf方法即可。

	/** 仅仅希望扩大数组 **/
	private static Object[] increaseArr(Object[] a){
		return Arrays.copyOf(a, a.length * 11 / 10 + 10);
	}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值