使用Java的反射,实现数组动态扩展的小方法。
package utils;
import java.lang.reflect.Array;
/**
* 基于反射的
* 扩展数组的通用工具类
* @author ZhaoLijun
* @version 1.0
*/
public class ExpandArray {
public static Object spreadArraySizeByReflect(Object originalArr, int percentage) {
Object newArr = null;
// 获得传入对象的Class对象
Class cl = originalArr.getClass();
// 是数组则拷贝原数组内容到新数组,并扩展新数组存储空间;非数组对象返回null
if(cl.isArray()) {
// 确定数组对像的具体类型,如int、Integer、String等
Class originalType = cl.getComponentType();
// 获得数组原始长度,并计算新数组长度
int oldSize = Array.getLength(originalArr);
int newSize = (int) Math.ceil(oldSize*(100 + percentage)/100);
newArr = Array.newInstance(originalType, newSize);
System.arraycopy(originalArr, 0, newArr, 0, oldSize);
}
return newArr;
}
/**
* testing method
* @param args
*/
public static void main(String[] args) {
String[] testArr = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
//int[] testArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//Integer[] testArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Object resultArr = spreadArraySizeByReflect(testArr, 10);
for(int i=0; i<Array.getLength(resultArr); i++) {
System.out.println(Array.get(resultArr, i));
}
}
}