java_reflect_04

反射操作数组:

通过public Class<?> getComponentType()来取得一个数组的Class对象

例:

import java.lang.reflect.Array ;
public class ClassArrayDemo{
    public static void main(String args[]) throws Exception{
        int temp[] = {1,2,3} ;// 声明一整型数组
        Class<?> c = temp.getClass().getComponentType() ;    // 取得数组的Class对象
        System.out.println("类型:" + c.getName()) ;    // 取得数组类型名称
        System.out.println("长度:" + Array.getLength(temp)) ;
        System.out.println("第一个内容:" + Array.get(temp,0)) ;
        Array.set(temp,0,6) ;
        System.out.println("第一个内容:" + Array.get(temp,0)) ;

    }
};

这里要注意一下这里的Array这个类java.lang.reflect.Array

以上程序中通过Array类取得了数组的相关信息,并通过Array类中的set()方法修改了数组中的元素内容.

在应用中还可以通过Array类根据已有的数组类型来开辟新的数组对象

例:

import java.lang.reflect.Array ;
public class ChangeArrayDemo{
    public static void main(String args[]) throws Exception{
        int temp[] = {1,2,3} ;// 声明一整型数组
        int newTemp[] = (int []) arrayInc(temp,5) ;    // 重新开辟空间5
        print(newTemp) ;
        System.out.println("\n-------------------------") ;
        String t[] = {"lxh","mldn","mldnjava"} ;
        String nt[] = (String [])arrayInc(t,8) ;
        print(nt) ;
    }
    public static Object arrayInc(Object obj,int len){
        Class<?> c = obj.getClass() ;
        Class<?> arr = c.getComponentType() ;    // 得到数组的
        Object newO = Array.newInstance(arr,len) ;    // 开辟新的大小
        int co = Array.getLength(obj) ;
        System.arraycopy(obj,0,newO,0,co) ;    // 拷贝内容
        return newO ;
    }
    public static void print(Object obj){    // 数组输出
        Class<?> c = obj.getClass() ;
        if(!c.isArray()){    // 判断是否是数组
            return;
        }
        Class<?> arr = c.getComponentType() ;
        System.out.println(arr.getName()+"数组的长度是:" + Array.getLength(obj)) ;     // 输出数组信息
        for(int i=0;i<Array.getLength(obj);i++){
            System.out.print(Array.get(obj,i) + "、") ;    // 通过Array输出
        }
    }
};
时间: 2024-10-15 12:17:59

java_reflect_04的相关文章