Когда я иду, чтобы запустить это я получаю сообщение об ошибке:Проблема с литья массив объектов обратно в массив целых чисел
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; at 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());
}
}
}
Предположительно, строка 30 - это строка, которая говорит 'R [] results = (R []) new Object [array.length]; '? –
Строка 30 - это когда я вызываю метод PrintArray. Приношу свои извинения за то, что не сказал. –
Я предполагаю, что 'R' разрешается' Object', а не 'Integer', как вы ожидаете. Честно говоря, массивы и дженерики обычно не играют хорошо вместе. Если бы мне пришлось написать это, я бы сделал 'map' return' List 'вместо' R [] '- он просто кажется чище каким-то образом. –