日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java 数组 反射_【译】10. Java反射——数组

發(fā)布時間:2024/9/27 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 数组 反射_【译】10. Java反射——数组 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

=====================================================================================

用Java反射來處理數(shù)組有時候是技巧性很強的。特別是如果你需要獲取一個給定類型的數(shù)組的Class對象,像int[ ]等。本文將講述怎么用Java反射來創(chuàng)建數(shù)組和獲取數(shù)組的Class對象。

下面是所涵蓋的主題列表:

java.lang.reflect.Array

Creating Arrays

Accessing Arrays

Obtaining the Class Object of an Array

Obtaining the Component Type of an Array

=====================================================================================

java.lang.reflect.Array

通過Java反射來處理數(shù)組需要用到java.lang.reflect.Array類。不要和Java集合中的java.util.Arrays類搞混淆了,它包含一些工具方法,像給數(shù)組排序、將數(shù)組轉(zhuǎn)換成集合等。=====================================================================================

CreatingArrays

通過Java反射來創(chuàng)建數(shù)組需要用到java.lang.reflect.Array類。下面的這個例子中會展示如何去創(chuàng)建一個數(shù)組:

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

這段代碼示例創(chuàng)建了一個int型的數(shù)組。Array.newInstance()方法的第一個參數(shù)int.class指定了數(shù)組中的每個元素應該是什么類型。第二個參數(shù)聲明了該數(shù)組應該為多少個元素開辟空間。

=====================================================================================

AccessingArrays

也可以通過Java反射來訪問數(shù)組中的元素。這是通過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] = 123intArray[1] = 456intArray[2] = 789

=====================================================================================

Obtaining the Class Object of an Array

我在Butterfly DI Container項目中開發(fā)腳本語言時遇到一個問題,如何通過Java反射獲得數(shù)組的Class對象。不用反射你可以這樣做:

Class stringArrayClass = String[].class;

對數(shù)組用Class.forName()不是很直觀。例如,你可以像這樣訪問基本類型數(shù)組的Class對象:

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

JVM中用字母I代表int。在左邊加上[(左中括號)表示我比較感興趣的int數(shù)組的類。這對所有其他的基本類型同樣有效。

對于對象,你需要用一個稍微不同的符號:

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

注意類名左邊的[L和右邊的分號(;)。這表示一個你指定類型的對象的數(shù)組。

附注,你不能用Class.forName()獲取基本類型的Class對象。下面的例子都會導致ClassNotFoundException:

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

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

我通常像這樣做來獲取基本類型和對象的類型名:

publicClass getClass(String className){if("int" .equals(className)) return int .class;if("long".equals(className)) return long.class;

...returnClass.forName(className);

}

一旦你獲取了一種類型的Class對象,你也可以很簡單的獲取一個數(shù)組類型的Class對象。方案,或者你叫它變通措施,是先創(chuàng)建一個你期望的類型的空數(shù)組,然后從這個空數(shù)組獲取它的Class對象。這感覺有作弊的嫌疑,但是很有效。下面是它看起來的樣子:

Class theClass =getClass(theClassName);

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

這代表一個單一的、統(tǒng)一的訪問任何類類型的數(shù)組。沒有擺弄類名等。

為了確認該Class對象的確是一個數(shù)組,你可以調(diào)用Class.isArray()來檢查:

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

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

=====================================================================================

Obtaining the Component Type of an Array

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

下面是一個訪問數(shù)組元素類型的例子:

String[] strings = new String[3];

Class stringArrayClass=strings.getClass();

Class stringArrayComponentType=stringArrayClass.getComponentType();

System.out.println(stringArrayComponentType);

這個例子將會輸出String數(shù)組的元素類型"java.lang.String"。

========================================================================================

目錄

這是一個本教程到目前為止涵蓋的主題列表:

(敬請期待下一篇翻譯)

總結(jié)

以上是生活随笔為你收集整理的java 数组 反射_【译】10. Java反射——数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。