Java 将对象数组强制转换回整数数组时出现问题
当我运行此命令时,会出现以下错误: 线程“main”java.lang.ClassCastException中的异常:[Ljava.lang.Object;无法转换为[Ljava.lang.Integer;位于main.main(main.java:30)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
公共类主
{
专用接口功能
{
公共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());
}
}
}