Почему не приводится Number[] к Double[]?
Double[] resultArray = (Double[]) DEFAULT_NUMBER_ARRAY;
Ведь Double является подклассом класса Number.
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Number; cannot be cast to [Ljava.lang.Double;
at com.lugowoy.helper.filling.array.numbers.FillingArrayDoubleRandomNumbers.fill(FillingArrayDoubleRandomNumbers.java:50)
at com.lugowoy.helper.filling.array.numbers.FillingArrayDoubleRandomNumbers.fill(FillingArrayDoubleRandomNumbers.java:26)
at com.lugowoy.helper.filling.array.numbers.FillerArrayNumbers.fill(FillerArrayNumbers.java:42)
at com.lugowoy.helper.filling.Test.main(Test.java:19)
Данное свойство называется ковариантностью. С википедии:
Ковариантностью называется сохранение иерархии наследования исходных типов в производных типах в том же порядке. Так, если класс Cat наследуется от класса Animal, то естественно полагать, что перечисление IEnumerable будет потомком перечисления IEnumerable. Действительно, «список из пяти кошек» — это частный случай «списка из пяти животных». В таком случае говорят, что тип (в данном случае обобщённый интерфейс) IEnumerable ковариантен своему параметру-типу T.
(В вашем случае Cat - это Double, Animal - это Number, IEnumetable - это массив)
Если говорить совсем просто, то можно рассуждать так - у вас есть массив из Number (каких угодно) и вы его хотите скастить к массиву Double. У вас этого сделать не получиться, потому что не всякий Number - это Double. Например, у вас в массиве Number'ов будет лежать Integer, и тогда все будет очень плохо.
Обратная ситуация сработает - у вас есть массив Double и вы его кастите к массиву Number. Т.е. каждый Double - это Number, то у вас все будет хорошо.
Коротко: подозреваю, что Double[] не является наследником Number[]
Если выполнить такой код:
System.out.println(Number[].class);
System.out.println(Double[].class);
System.out.println(Number.class);
System.out.println(Double.class);
то в ответ мы получим:
class [Ljava.lang.Number;
class [Ljava.lang.Double;
class java.lang.Number
class java.lang.Double
тут важны первые 2 символа в имени классов массивов, это совсем другие классы, не Number и Double. Подозреваю, т.к. исходников не нашел, что Double[] не является наследником Number[] поэтому и привидение не работает.
В данном случае вам поможет простое перекидывание массива из одного в другой. Там вы уже будете обращаться к Number, который возможно будет принадлежать Double
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости