[英]Java Convert Unknown Primitive Array to Object Array
我一直在嘗試創建自己的庫,以使用反射來檢查方法命名模式和方法返回類型,以從類到xml以及從xml到類實例對原始類型進行序列化和反序列化。
到目前為止,我已經能夠使用所有基本基本類型進行此操作,但是我被困在序列化相同基本類型的數組上。
例如,我調用class方法來獲取原語數組:
method.invoke(clazz, (Object[])null);
該方法將僅返回原始數組int[], double[], float[], char[]
等,盡管我們不知道它將是哪一個。
我試過使用通用
T t = (T)method.invoke(clazz, (Object[])null);
T[] t = (T[])method.invoke(clazz, (Object[])null);
但這不允許我從原始數組轉換為對象。
而且,假設我們不知道類型,就不能使用Array.newInstance
。
有沒有一種方法可以將這種原語數組轉換為通用的Object數組。
以一般方式表示,無需知道或檢查數組的類型是什么。 還是我應該遍歷所有原始類型並分別處理它們。
我可以通過兩種方式做到這一點,我想以通用方式做到這一點的唯一原因是減少冗余代碼。
提前致謝。
您可以使用Array實用程序類
public static Object[] toObjectArray(Object array) {
int length = Array.getLength(array);
Object[] ret = new Object[length];
for(int i = 0; i < length; i++)
ret[i] = Array.get(array, i);
return ret;
}
java.lang.reflect.Array.get()是否可以做您想要的?
Object result = method.invoke(clazz, (Object[])null);
Class<?> arrayKlazz = result.getClass();
if (arrayKlazz.isArray()) {
Class<?> klazz = result.getComponentType();
if (klazz == int.class) {
int[] intArray = arrayKlazz.cast(result);
}
}
在對象中保存(原始)數組似乎更合適(上面的result
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.