這個答案很晚,但希望它能幫助未來的訪問者解決這個問題。 我在反射液取可以改進,但基本的思路是這樣的:
@SuppressWarnings("unchecked")
private static <TArray, TElement> TArray toArray(final Object elements, final Class<TElement> elementType)
{
final int length = java.lang.reflect.Array.getLength(elements);
final Object resultArray = java.lang.reflect.Array.newInstance(elementType, length);
for (int i = 0; i < length; ++i)
{
final Object value = java.lang.reflect.Array.get(elements, i);
java.lang.reflect.Array.set(resultArray, i, value);
}
return (TArray)resultArray;
}
然後如下使用:
final Boolean[] booleans = new Boolean[] { true, false, true, true, false };
final boolean[] primitives = toArray(booleans, boolean.class);
System.out.println(Arrays.asList(booleans));
for (boolean b : primitives)
{
System.out.print(b);
System.out.print(", ");
}
這會打印出:
[true, false, true, true, false]
true, false, true, true, false,
該工具可以幫助我們從java.sql.Array
中拉出數組,因爲java.sql.Array
只給了我們一個Object
的數組。
'final int [] ret = new int [wrappedArray.length]; int i = 0; for(int w:wrappedArray)ret [i ++] = w;返回ret;' – 2012-07-15 14:52:07
@MarkoTopolnik,更新了問題以反映我的情況。我知道它收到一個原始包裝類的數組。我可以通過反射獲得實際的類和相關的基元類型。 – rid 2012-07-15 14:55:55
沒有從'Integer.class'到'int []'的自動方法。您必須爲每種類型明確進行該轉換。您還需要爲提取原始值的每種封裝類型調用不同的方法。你會以極其緩慢,令人費解的反射意大利麪或者快速重複的文字代碼結束。 – 2012-07-15 15:08:33