Warum sind Arrays kovariant, aber Generika sind invariant?

Aus Effective Java von Joshua Bloch,

Arrays unterscheiden sich vom generischen Typ in zwei wichtigen Punkten. Erste Arrays sind kovariant. Generika sind unveränderlich.

Kovariante bedeutet einfach, wenn X ein Subtyp von Y ist, dann ist X [] auch ein Subtyp von Y []. Arrays sind kovariant, da string der Untertyp von Object So ist

String[] is subtype of Object[]

Invariante bedeutet einfach, unabhängig davon, ob X ein Subtyp von Y ist oder nicht,

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

Meine Frage ist, warum die Entscheidung, Arrays in Java kovariant zu machen? Es gibt noch andere SO Beiträge wieWarum sind Arrays invariant, Listen jedoch kovariant?, aber sie scheinen sich auf Scala zu konzentrieren und ich kann nicht folgen.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage