[英]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.