日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java反射 数组类型_Java反射-数组

發布時間:2024/7/23 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java反射 数组类型_Java反射-数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過反射使用數組有時會比較棘手。特別是需要獲得一個特定類型數組的Class對象,如int[]等。本文將討論如何通過反射創建數組和獲得他們的Class對象。

注意:本文在閱讀Eyal Lupu的博客"Two Side Notes About Arrays and Reflection"后已更新,他的博客是本文第一個版本的評論。當前版本考慮了他的評論內容。

java.lang.reflect.Array

數組反射是通過類java.lang.reflect.Array實現的。不要把這個類與集合包的java.util.Arrays混淆,java.util.Arrays包含數組排序、轉換成集合等。

Creating Arrays

通過反射創建數組是java.lang.reflect.Array實現的。示例代碼如下:

int[] intArray = (int[]) Array.newInstance(int.class, 3);

示例代碼創建了一個int數組。Array.newInstance()方法的第一個參數int.class定義了數組每一個元素的類型。第二個參數定義數組的元素個數。

Accessing Arrays

可以通過反射訪問數組元素。這是通過Array.get(...)和Array.set(...)方法實現的。示例:

int[] intArray = (int[]) Array.newInstance(int.class, 3);

Array.set(intArray, 0, 123);

Array.set(intArray, 1, 456);

Array.set(intArray, 2, 789);

System.out.println("intArray[0] = " + Array.get(intArray, 0));

System.out.println("intArray[1] = " + Array.get(intArray, 1));

System.out.println("intArray[2] = " + Array.get(intArray, 2));

示例代碼將輸出:

intArray[0] = 123

intArray[1] = 456

intArray[2] = 789

Obtaining the Class Object of an Array

在實現Butterfly DI Container的腳本語言時一個問題就是如何通過反射獲得數組的Class對象。無反射代碼如下:

Class stringArrayClass = String[].class;

做這些使用Class.forName()并不是直接了當。例如,訪問原始int數組類對象代碼:

Class intArray = Class.forName("[I");

JVM使用小寫l代表int。左邊的[的意思是它是我有興趣的int數組的類對象。其他基本類型也是按照這個模式工作。

對于其他類型對象,需要使用稍微不同的符號:

Class stringArrayClass = Class.forName("[Ljava.lang.String;");

注意:[L在類名的左側,;在類名的右側。這段代碼的意思是給定類型的數組對象。

作為旁注,你不能使用Class.forName()獲得基本類型的類對象。下面的兩行代碼都會拋出ClassNotFoundException:

Class intClass1 = Class.forName("I");

Class intClass2 = Class.forName("int");

我通常使用像下面的代碼獲得基本類型的類對象:

public Class getClass(String className){

if("int" .equals(className)) return int .class;

if("long".equals(className)) return long.class;

...

return Class.forName(className);

}

一旦你獲得一個類型的Class對象,很簡單就能獲得這個類型的數組的Class對象。這個解決方案,或者叫它解決辦法,是創建指定類型的空數組并通過空數組獲得Class對象。這并不很優雅,但是有效。代碼如下:

Class theClass = getClass(theClassName);

Class stringArrayClass = Array.newInstance(theClass, 0).getClass();

這提供了一種單一的、統一的方法來訪問任何類型的數組的數組類。不要擺弄類名等。

為了確保Class對象確實是一個數組,可以調用Class.isArray()方法來檢查:

Class stringArrayClass = Array.newInstance(String.class, 0).getClass();

System.out.println("is array: " + stringArrayClass.isArray());

Obtaining the Component Type of an Array

一旦你獲得數組的Class對象,你可以通過Class.getComponentType()訪問它的組合類型。組合類型是數組中的元素的類型。例如,int[]數組的組合類型是int.class的Class對象。String[]數組的組合類型是java.lang.String的Class對象。

訪問數組的組合類型的代碼如下:

String[] strings = new String[3];

Class stringArrayClass = strings.getClass();

Class stringArrayComponentType = stringArrayClass.getComponentType();

System.out.println(stringArrayComponentType);

示例代碼將輸出"java.lang.String",這是String[]數組的組合類型。

總結

以上是生活随笔為你收集整理的java反射 数组类型_Java反射-数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。