Java反射–数组

时间:2020-01-09 10:35:19  来源:igfitidea点击:

由于Java中的array也是一个类,因此java.lang.Class中的许多方法也可以与该数组一起使用。除了Java Reflection API中的类之外,还有一个类java.lang.reflect.Array,该类具有用于创建新数组,在运行时获取和设置数组元素的方法。

使用Java Reflection识别数组类型

要确定任何class字段是否为数组类型,可以使用Class.isArray()方法。下面的类用于数组字段的示例目的。

public class Message {
  String msg;
  private int[] codeArray;

  public void displayMessage(){
    System.out.println(msg);
  }
}
import java.lang.reflect.Field;

public class ReflectionDemo {
  public static void main(String[] args) {
    try {
      // get instance of Class
      Class<?> cls = Class.forName("com.theitroad.programs.Message");	
      Field[] fields = cls.getDeclaredFields();
      for (Field f : fields) {
        Class<?> type = f.getType();
        // Looking for array
        if(type.isArray()){
          System.out.println("Array found- " + f.getName());
        }
      }		   		           
    } catch (IllegalArgumentException | ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

输出:

Array found- codeArray

使用Java Reflection创建新数组

Java Reflection API提供了使用java.lang.reflect.Array.newInstance()方法动态创建任意类型和尺寸的数组的功能。

public class ReflectionDemo {
  public static void main(String[] args) {
    int[] codesArray = (int[])Array.newInstance(int.class, 5);
    System.out.println("Array of length " + codesArray.length + " created.");
  }
}

输出:

Array of length 5 created.

使用Java Reflection获取/设置数组元素

为了获取和设置数组的元素,java.lang.reflect.Array中有多个setter和getter,用于不同类型,例如setByte(),setDouble(),getInt(),getFloat()以及通用的get()和set()方法。

  • set(Object array,int index,Object value)–设置指定数组中给定索引处的传递值。

  • get(Object array,int index)–返回指定数组对象中分隔索引处的值。

import java.lang.reflect.Array;

public class ReflectionDemo {
  public static void main(String[] args) {
    int[] codesArray = (int[])Array.newInstance(int.class, 5);
    System.out.println("Array of length " + codesArray.length + " created.");
    //using set method to set value
    Array.set(codesArray, 0, 3);
    // Setting values using setInt method
    Array.setInt(codesArray, 1, 10);		
    Array.setInt(codesArray, 2, 4);
    
    // Getting values using getInt and get methods
    System.out.println("Value at index 0- " + Array.get(codesArray, 0));
    System.out.println("Value at index 1- " + Array.getInt(codesArray, 1));
    System.out.println("Value at index 2- " + Array.getInt(codesArray, 2));
  }
}

输出:

Array of length 5 created.
Value at index 0- 3
Value at index 1- 10
Value at index 2- 4