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