java反射Array的使用

1.什麼是Array

Array是一個類的簡寫,全限定類名是java.lang.reflect.Array.java

2.Array有什麼用

Array能夠表明全部的數組,能夠經過Array動態建立與修改裏面的元素.數組

3.Array使用示例

(1)建立

使用靜態方法newInstance()構造Object對象.方法以下:ide

public static Object newInstance(Class<?> element, int ... length);

第一個參數是表明元素的類,剩下的參數表示維數,一個參數表示一維數組,兩個參數表示二維數組(數組的數組),參數的值表明維數的長度.code

Object intArray = Array.newInstance(int.class,3);              //int [3]
Object stringArray = Array.newInstance(String.class,2,3);      //String [2][3]

(2)賦值

賦值使用靜態方法set便可,參數爲Array返回的Object對象,下標與對應的值.對象

public static void set(Object array,int index,Object value);
public static void setBoolean(Object array,int index,boolean b);
public static void setXxxx(Object array,int index,xxx);

其中最後一個表示對應的基本類型,第二個爲boolean類型的示例.blog

Array.set(intArray,2,3);
Array.set(stringArray,1,new String[]{"123","456"});

(3)獲取值

使用靜態方法get,參數爲Array返回的Object對象與下標.圖片

public static Object get(Object array,int index);
public static boolean getBoolean(Object array,int index);
public static xxx getXxx(Object array,int index);

最後一個表示對應的基本類型,第二個爲boolean類型的示例element

System.out.println(Array.get(intArray,2));
System.out.println(Array.get(Array.get(stringArray,1),1));

(4)強制類型轉換

能夠經過強制類型轉換使Array返回的Object對象轉換爲對應的數組.get

var castIntArray = (int [])intArray;
var castStringArray = (String [][])stringArray;

這樣能夠看成一個普通數組使用.string

4.完整代碼

import java.lang.reflect.*;

public class test
{
    public static void main(String[] args) {
        var intArray = Array.newInstance(int.class, 3);
        var stringArray = Array.newInstance(String.class, 2,3);
        Array.set(intArray, 2, 3);
        Array.set(stringArray, 1, new String[] { "123", "456" });

        System.out.println(Array.get(intArray, 2));
        System.out.println(Array.get(Array.get(stringArray,1),1));

        System.out.println("-------cast-------");
        System.out.println(((int[]) intArray)[2]);
        System.out.println(((String [][])stringArray)[1][1]);
    }
}

5.運行結果

在這裏插入圖片描述

如下×××](https://s1.51cto.com/images/blog/201910/25/96739f0c6b4c65a0c7d1acc10cfcc528.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

相關文章
相關標籤/搜索