码迷,mamicode.com
首页 > 编程语言 > 详细

Java 数组反射(Array Reflection)

时间:2014-09-18 20:43:44      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:array reflection   getcomponenttype   



1. 在不确定某个参数或对象是否是数组的时候,就可以使用发射机制,把该对象的Class对象传给Array.isArray(Class<?>) 方法进行判断。通过Class对象的 getComponentType() 方法可以进一步知道数组组件的具体类型,数组如果是多维的话可以递归调用Array.isArray;
2.Array.getLength(class)可以得到数组的大小;
3.可以运行时利用反射机制来创建某种类型的数组,利用 java.lang.reflect.Array.newInstance()方法(有两种形式),同样在创建的时候也可以递归的调用该方法。

下面是两个例子
1.利用反射创建,填充,显示数组:
public class ArrayCreate {
  public static void main (String args[]) {
      // 创建一个数组
      Object array = Array. newInstance( int. class, 3);
      printType(array);
      fillArray(array);
      displayArray(array);
  }
  // 打印這個對象的数组类型和大小
  private static void printType (Object object) {
    Class<?> type = object.getClass();
    if (type.isArray()) {
     Class<?> elementType = type.getComponentType();
          System. out .println("Array of: " + elementType);
          System. out .println("Array size: " + Array.getLength(object));
    }
  }
  // 填充数组
  private static void fillArray(Object array) {
    int length = Array. getLength(array);
    Random generator = new Random(System.currentTimeMillis());
    for ( int i=0; i<length; i++) {
      int random = generator.nextInt();
           //Sets the value of the indexed component of the specified
           //array object to the specified int value.
          Array. setInt(array, i, random);
    }
  }
  private static void displayArray(Object array) {
    int length = Array. getLength(array);
    for ( int i=0; i<length; i++) {
      int value = Array. getInt(array, i);
     System. out.println( "Position: " + i + ", value: " + value);
    }
  }
}


2. 数组容量扩容:
public class DoubleArray2 {
  public static void main (String args[]) {
    int array[] = {1, 2, 3, 4, 5};
    System. out.println( "Original size: " + array.length );
    System. out.println( "New size: " + ((int [])doubleArray(array)). length);
    System. out.println((( int [])doubleArray(array))[1]);
  }
  static Object doubleArray(Object original) {
    Object returnValue = null ;
    Class<?> type = original.getClass();
    if (type.isArray()) {
      int length = Array. getLength(original);
      Class<?> elementType = type.getComponentType();
      // 根据数组组件的类型,来扩容
      returnValue = Array. newInstance(elementType, length*2);
      System. arraycopy(original, 0, returnValue, 0, length);
    }
    return returnValue;
  }
}


Java 数组反射(Array Reflection)

标签:array reflection   getcomponenttype   

原文地址:http://blog.csdn.net/vonzhoufz/article/details/39377647

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!