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