Java 将对象数组强制转换回整数数组时出现问题

Java 将对象数组强制转换回整数数组时出现问题,java,arrays,classcastexception,Java,Arrays,Classcastexception,当我运行此命令时,会出现以下错误: 线程“main”java.lang.ClassCastException中的异常:[Ljava.lang.Object;无法转换为[Ljava.lang.Integer;位于main.main(main.java:30) 公共类主 { 专用接口功能 { 公共R应用(D参数); } 公共静态void main(字符串[]args) { //例1 函数函数=新的CalculateSuccessor(); 整数[]整数数组={1,3,4,2

当我运行此命令时,会出现以下错误:

线程“main”java.lang.ClassCastException中的异常:[Ljava.lang.Object;无法转换为[Ljava.lang.Integer;位于main.main(main.java:30)

公共类主
{ 
专用接口功能
{ 
公共R应用(D参数);
}
公共静态void main(字符串[]args)
{           
//例1
函数函数=新的CalculateSuccessor();
整数[]整数数组={1,3,4,2,5};

PrintArray(map(function,integerArray));//map返回{2,4,5,3,6}问题是结果数组被创建为新对象[array.length]。强制转换(R[])不会将此数组转换为其他类型,它只是告诉编译器将其视为R[]。请参阅。创建泛型类型的数组有点麻烦-例如,您可以在谷歌上搜索各种解决方案-但通常最简单的方法是使用列表而不是数组:您可以使用新的ArrayList创建它。

大概第30行是说
R[]results=(R[])new Object[array.length]第30行是我调用PrintArray方法的时候。我很抱歉没有说明这一点。我猜
R
被解析为
Object
,而不是
Integer
。老实说,数组和泛型通常不能很好地结合在一起。如果我不得不写这个,我会让
map
返回
List
而不是
R[]
-它看起来更干净了。我用自己的函数运行了代码(只返回参数),它运行得很好。intellij 12-jdk1.7.0\u 21问题可能在于
CalculateSuccessor
的定义中-也许这在某种程度上限制了
R
public class Main 
{ 
    private interface Function<R, D> 
    { 
        public R apply(D parameter);
    }

    public static void main(String[] args) 
    {           
        // Example 1
        Function<Integer, Integer> function = new CalculateSuccessor();
        Integer[] integerArray = {1, 3, 4, 2, 5};
        PrintArray(map(function, integerArray)); // map returns {2, 4, 5, 3, 6}  <--- line 30
    }

    @SuppressWarnings({"unchecked"})
    public static <R, D> R[] map(Function<R, D> function, D[] array)
    {
        R[] results = (R[]) new Object[array.length];

        // Iterate through the source array, apply the given function, and record results
        for (int i = 0; i < array.length; i++)
        {
            results[i] = (R)function.apply(array[i]);
        }

        return results;  
    }

    public static <T> void PrintArray(T[] array)
    {
        for (T element : array)
        {
            System.out.println(element.toString());
        }   
    } 
}