利用反射来复制任意类型的数组,并为其分配不同的长度:
1.获得原有数组的类
Class c1=object.getClass();
2.判断类是否为一个数组
c1.isArray();
3.创建与原有数组类型相同的数组,但是长度变长
Array.newInstance(c1.getComponentType(),newLength);
4.将原数组中的内容复制到新数组中
System.arraycopy(object,0,newArray,0,Math.min(length,newLength));
自定义的Son类
package resources;
public class Son extends Father{
public Son() {
}
public Son(String name) {
setName(name);
}
}
验证类
package resources;
import java.lang.reflect.Array;
public class ArrayTest {
public static void main(String[] args) {
Son[] sons=new Son[10];
for(int i=0;i<sons.length;i++) {
sons[i]=new Son("Son"+i);
}
Son[] newSons=(Son[])arrayCopy(sons, 2*sons.length);
int i=0;
for(Son son:newSons) {
if(i==Math.min(sons.length, newSons.length))
break;
System.out.println(son.getName());
i++;
}
}
public static Object arrayCopy(Object object,int newLength) {
Class cl=object.getClass();
if(!cl.isArray())
return null;
Class compClass=cl.getComponentType();
int length=Array.getLength(object);
Object newArray=Array.newInstance(compClass, newLength);
System.arraycopy(object, 0, newArray, 0,Math.min(length,newLength));
return newArray;
}
}
结果:
Son0
Son1
Son2
Son3
Son4
Son5
Son6
Son7
Son8
Son9