Почему возникает Ошибка ПРИВЕДЕНИЯ ТИПОВ в строке
return (Integer[]) list.toArray();
public class Solution {
public static void main(String[] args) {
Integer[] arr = new Integer[]{13, 8, 15, 5, 17};
for(Integer i:sort(arr)){
System.out.println(i);
}
}
public static Integer[] sort(Integer[] array) {
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(array));
Collections.sort(list);
double mediana;
if (list.size()%2!=0) mediana = list.get(list.size()/2);
else mediana = ( list.get(list.size()/2) + list.get(list.size()/2-1) )*(1.0)/2;
Comparator<Integer> compAbs = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
double d1 = Math.abs(o1-mediana);
double d2 = Math.abs(o2-mediana);
return (d1 - d2)<0?-1:d1-d2==0?0:1;
}
};
Collections.sort(list,compAbs);
return (Integer[]) list.toArray();
}
}
А вот в этом примере Ошибки НЕТУ!!! Почему ее во втором примере нет, а впервом есть. Мы же в обеих случаях делаем ОПЕРАЦИЮ ПРИВЕДЕНИЯ К ТИПУ (Integer[])
public class Main {
public static void main(String[] args) {
List<Integer> wordsList = Arrays.asList(1,2,3,4);
Integer[] wordsArray = (Integer[]) wordsList.toArray();
for (Integer word : wordsArray) {
System.out.println(word);
}
}
}
toArray()
возвращает массив Object-ов. Этот массив нельзя преобразовать к массиву Integer-ов. Ничего не понимаю... :( P.S.: Проверил в jshell, во втором примере, как и ожидалось, возникает ошибка. Вы уверены что у Вас компилятор пропускает это?new Object[]
, то положить в него можно любые объекты, а не только Integer-ы. Поэтому такой массив нельзя привести к типуInteger[]
. Вывод:new Integer[]
к типуObject[]
, то положить что-то кроме Integer-ов туда нельзя: Но такой массив может быть с лёгкостью приведён к типуInteger[]
: