簡體   English   中英

在構造函數中的類數組與反射

[英]Class array in constructor with reflection

我需要在我的代碼中使用反射,所以我的程序不會破壞每個不同的版本。 我想創建一個類的新實例,我想要使用的構造函數包含一個類的數組。 但是,必須使用反射找到該類。 這是我目前擁有的一個例子。

Constructor<?> constructor = getClass("className").getConstructor(getClass("anotherClass"));

private Class<?> getClass(String name) {
    return Class.forName("my.package." + version + "." + name);
}

但是構造函數不使用該類,而是使用該類的數組,那么如何將此類轉換為它的數組類型呢?

Java虛擬機規范指定了數組類型的類名。 您可以構造這樣的名稱並使用Class#forName 但是,名稱的邏輯在原始類型和引用類型之間有所不同,因此生成這些String名稱可能會很煩人。

相反,您可以為給定類型構造一個大小為0的數組,並使用它來使用getClass()檢索其類型。

例如

Class<?> componentType = Class.forName("java.lang.String");
Class<?> arrayType = java.lang.reflect.Array.newInstance(componentType, 0).getClass();
System.out.println(arrayType);

將打印

class [Ljava.lang.String;

然后, arrayType將保存給定數組類型的Class對象。 您可以使用它來檢索構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM