Почему массивы ковариантны, а дженерики инвариантны?

От Эффективной Явы Джошуа Блоха,

Массивы отличаются от универсального типа двумя важными способами. Первые массивы ковариантны. Обобщения являются инвариантами.

Ковариант просто означает, что если X является подтипом Y, то X [] также будет подтипом Y []. Массивы являются ковариантными, так как string является подтипом Object So

String[] is subtype of Object[]

Инвариант просто означает, независимо от того, является ли X подтипом Y или нет,

 List<X> will not be subType of List<Y>.

У меня вопрос, почему решение сделать массивы ковариантными в Java? Есть и другие сообщения, такие какПочему массивы инвариантны, а списки ковариантны?, но они, кажется, сосредоточены на Скале, и я не могу следовать.

Ответы на вопрос(8)

Ваш ответ на вопрос