import java.lang.reflect.*;
//本程序演示了用反射来 *** 纵数组
public class ArrayGrowTest {
public static void main(String[] args)
{
int[] a={1,2,3};
a=(int[]) goodArrayGrow(a);
arrayPrint(a);
String [] b={"Tom","Dick","Harry"};
b=(String[]) goodArrayGrow(b);
arrayPrint(b);
// System.out.println("The following call will generate an exception.");
// b=(String[]) badArrayGrow(b);
}
//本程序试图通过分配一个新的数组,然后草被所有的元素实现 增长一个数组(为数组扩容)
//为什么这么做不好呢?因为 这个创建数组的语句是:Object[] newArray=new Object[newLength] 这样
//创建的数组是Object[] ,这个数组是不能转换为其他类型的数组的。
static Object[] badArrayGrow(Object[] a)
{
int newLength=a.length*11/10+10;
Object[] newArray=new Object[newLength];
System.arraycopy(a,0,newArray,0,a.length);
return newArray;
}
//本方法通过分配一个新的同样类型的数组 然后拷贝所有的元素.请注意这个same type 同样的类型 这个是关键
static Object goodArrayGrow(Object a)
{
Class cl=a.getClass();
if(!cl.isArray())return null;
Class componentType=cl.getComponentType();
int length=Array.getLength(a);
int newLength=length*11/10+10;
Object newArray=Array.newInstance(componentType,newLength);
System.arraycopy(a,0,newArray,0,length);
return newArray;
}
//打印数组中的元素
static void arrayPrint(Object a)
{
Class cl=a.getClass();
if(!cl.isArray()) return ;
Class componentType=cl.getComponentType();
int length=Array.getLength(a);
System.out.print(componentType.getName()+"["+length+"]={");
for(int i=0;i
运行结果:
int[13]={1 2 3 0 0 0 0 0 0 0 0 0 0 }
java.lang.String[13]={Tom Dick Harry null null null null null null null null null null }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)