Почему массивы ковариантны, а дженерики инвариантны?
От Эффективной Явы Джошуа Блоха,
Массивы отличаются от универсального типа двумя важными способами. Первые массивы ковариантны. Обобщения являются инвариантами.Ковариант просто означает, что если X является подтипом Y, то X [] также будет подтипом Y []. Массивы являются ковариантными, так как string является подтипом Object So
String[] is subtype of Object[]
Инвариант просто означает, независимо от того, является ли X подтипом Y или нет,
List will not be subType of List.
У меня вопрос, почему решение сделать массивы ковариантными в Java? Есть и другие сообщения, такие какПочему массивы инвариантны, а списки ковариантны?, но они, кажется, сосредоточены на Скале, и я не могу следовать.