1

当我去运行它时,我得到了错误:

线程“main”中的异常 java.lang.ClassCastException: [Ljava.lang.Object; 不能转换为 [Ljava.lang.Integer; 在 Main.main(Main.java:30)

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());
        }   
    } 
}
4

1 回答 1

0

问题是结果数组被创建为新对象 [array.length]。强制转换 (R[]) 不会将此数组转换为不同的类型,它只是告诉编译器将其视为 R[]。请参阅快速 Java 问题:将对象数组转换为我的预期类数组。创建一个泛型类型的数组有点讨厌 - 你可以用谷歌搜索各种解决方案,例如如何在 Java 中创建一个泛型数组?- 但通常最简单的方法是使用列表而不是数组:您可以使用 new ArrayList<R> 创建它

于 2013-10-03T03:59:29.310 回答