📜  Java中的反射数组类reflect.Array

📅  最后修改于: 2020-03-28 03:16:43             🧑  作者: Mango

java.lang.reflect包中Array类是Java Reflection的一部分。此类提供了静态方法来动态创建和访问Java数组。这是final的类,这意味着它不能被实例化或更改。类名本身只能使用此类的方法。
所述java.util.Arrays中类包含用来操作阵列的各种方法(例如排序和搜索),而此java.lang.reflect.Array中类提供静态方法来动态创建和访问Java阵列。该Array类使数组保持类型安全。
类层次结构:

java.lang.Object
 ↳ java.lang.reflect.Array

类声明:

public final class Array
    extends Object

使用数组的语法:

Array.;

Java Array中的方法:

  1. static Object get(Object array,int index):此方法返回指定数组对象中索引组件的值。
  2. static boolean getBoolean(Object array,int index):此方法以布尔值形式返回指定数组对象中索引组件的值。
  3. static byte getByte(Object array, int index):此方法以字节形式返回指定数组对象中索引组件的值。
  4. static char getChar(Object array,int index):此方法以 char形式返回指定数组对象中索引组件的值。
  5. static double getDouble(Object array,int index):此方法以double形式返回指定数组对象中索引组件的值。
  6. static float getFloat(Object array,int index):此方法以float形式返回指定数组对象中索引组件的值。
  7. static int getInt(Object array,int index):此方法以 int形式返回指定数组对象中索引组件的值。
  8. static int getLength(Object array):此方法以int形式返回指定数组对象的长度。
  9. static long getLong(Object array,int index):此方法以 long形式返回指定数组对象中索引组件的值。
  10. static short getShort(Object array,int index):此方法以short形式返回指定数组对象中索引组件的值。
  11. static Object newInstance(Class componentType,int length):此方法创建具有指定组件类型和长度的新数组。
  12. static Object newInstance(Class componentType,int…Dimensions):此方法创建具有指定组件类型和尺寸的新数组。
  13. static void set(Object array,int index,Object value):此方法将指定数组对象的索引组件的值设置为指定的新值。
  14. static void setBoolean(Object array,int index,boolean z):此方法将指定数组对象的索引组件的值设置为指定的布尔值。
  15. static void setByte(Object array,int index,字节b):此方法将指定数组对象的索引组件的值设置为指定的字节值。
  16. static void setChar(Object array,int index,char c):此方法将指定数组对象的索引组件的值设置为指定的char值。
  17. static void setDouble(Object array,int index,double d):此方法将指定数组对象的索引组件的值设置为指定的double值。
  18. static void setFloat(Object array,int index,float f):此方法将指定数组对象的索引组件的值设置为指定的float值。
  19. static void setInt(Object array,int index,int i):此方法将指定数组对象的索引组件的值设置为指定的int值。
  20. static void setLong(Object array,int index,long l):此方法将指定数组对象的索引组件的值设置为指定的long值。
  21. static void setShort(Object array,int index,short s):此方法将指定数组对象的索引组件的值设置为指定的short值。

如何使用java.lang.util.reflect.Array类创建数组

使用reflect.Array类创建数组与通常的方法不同。创建这样的数组的过程如下:

  1. 获取要创建的数组的大小
  2. 要创建一个数组(例如X类),请使用Array类的newInstance()方法将X类作为数组的类型,并将数组的大小作为参数传递。语法:
    X[] arrayOfXType = (X[]) Array.newInstance(X.class, size);
    where X is to be replaced by
    the type of the array like int, double, etc.
  3. 此方法返回给定大小的Object数组,然后将其转换为所需的X []类型。
  4. 因此,已经创建了所需的类型X的数组。

下面是使用Array类创建大小为5的整数数组的示例:
创建大小为5的整数数组:

// Java创建大小为5的整数数组:
import java.lang.reflect.Array;
import java.util.Arrays;
public class GfG {
    public static void main(String[] args)
    {
        // 获取数组长度size
        int sizeOfArray = 5;
        // 使用 reflect.Array 类创建数组
        // This is done using the newInstance() method
        int[] intArray = (int[])Array
                             .newInstance(int.class,
                                          sizeOfArray);
        // 打印数组
        System.out.println(Arrays.toString(intArray));
    }
}

输出:

[0,0,0,0,0]

如何使用java.lang.util.reflect.Array类在数组中添加元素

就像创建数组一样,使用reflect.Array类在数组中添加元素也与通常方式不同。在此类数组中添加元素的过程如下:

  1. 获取要添加的元素的值。
  2. 获取要添加元素的索引。
  3. 要在数组中添加元素(例如X类),请使用Array类的setX()方法,其中X将被替换为数组类型,例如setInt(),setDouble()等。此方法在以下语法中,将X []作为第一个参数,将元素要添加到的索引作为第二个参数,并将元素作为第三个参数。语法:
    Array.setX(X[], indexOfInsertion, elementToBeInserted);
    x将会替换成如int,double的array
  4. 此方法将元素插入此数组中的指定索引处
  5. 因此,所需的元素已插入到数组中。

以下是使用Array类将元素添加到整数数组中的示例:
示例:要将元素添加到整数数组中:

// Java给array添加元素
import java.lang.reflect.Array;
import java.util.Arrays;
public class GfG {
    public static void main(String[] args)
    {
        // array的size
        int sizeOfArray = 3;
        // 使用reflect.Array类创建数组
        // This is done using the newInstance() method
        int[] intArray = (int[])Array
                             .newInstance(int.class,
                                          sizeOfArray);
        // 给数组添加元素
        // 使用setInt()方法
        Array.setInt(intArray, 0, 10);
        Array.setInt(intArray, 1, 20);
        Array.setInt(intArray, 2, 30);
        // 打印array
        System.out.println(Arrays.toString(intArray));
    }
}

输出:

[10, 20, 30]

如何使用java.lang.util.reflect.Array类检索数组中的元素?

与创建数组一样,使用reflect.Array Class检索数组中的元素也与通常方式不同。检索此类数组中的元素的过程如下:

  1. 获取要在其中检索元素的索引。
  2. 要检索数组中的元素(例如X类),请使用Array类的getX()方法,其中X将被替换为数组的类型,例如getInt(),getDouble()等。此方法在以下语法中,将X []作为第一个参数,将要在其上检索元素的索引作为第二个参数。语法: 
    Array.getX(X[], indexOfRetrieval);

    X将被替换为数组的类型,例如int,double等。

  3. 此方法从此数组中检索指定索引处的元素。
  4. 因此,已从数组中检索了所需的元素。

以下是使用Array类从整数数组中检索元素的示例:
从整数数组中检索元素:

// Java展示从数组检索制定index的元素
import java.lang.reflect.Array;
import Java.util.Arrays;
public class GfG {
    public static void main(String[] args)
    {
        // 获得array的size
        int sizeOfArray = 3;
        // 使用reflect.Array创建array
        // 利用了newInstance()方法
        int[] intArray = (int[])Array
                             .newInstance(int.class,
                                          sizeOfArray);
        // 给array增加元素
        // 使用getInt()方法
        Array.setInt(intArray, 0, 10);
        Array.setInt(intArray, 1, 20);
        Array.setInt(intArray, 2, 30);
        // 打印array的内容
        System.out.println(Arrays.toString(intArray));
        // 获取array中的元素
        // 使用getInt()方法
        System.out.println("在index 0的元素值: "
                           + Array.getInt(intArray, 0));
        System.out.println("在index 1的元素值: "
                           + Array.getInt(intArray, 1));
        System.out.println("在index 2的元素值: "
                           + Array.getInt(intArray, 2));
    }
}

输出:

[10, 20, 30]
在index 0的元素值: 10
在index 1的元素值: 20
在index 2的元素值: 30