簡體   English   中英

Java將未知的原始數組轉換為對象數組

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

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