Java generics und Arrays-Initialisierung

Was ist die Erklärung für das folgende:

public class GenericsTest {
    //statement 1
    public ArrayList<Integer>[] lists;

    public GenericsTest()
    {
            //statement 2
        lists = new ArrayList<Integer>[4];
    }
}

Den compiler akzeptiert Aussage 1. Aussage 2 ist gekennzeichnet durch die compiler für "generic array creation".

Eine gute Erklärung, die ich gesehen habe in Bezug auf das Verbot generische arrays ist diese eine, mit dem argument, dass da arrays sind covariant und Generika sind nicht könnten Sie untergraben die generische Eingabe, wenn Sie erlaubt generische arrays.

Abgesehen von dem Streit, ob die Sprache gehen sollte, um die extremen Längen der Erstellung dieser Art von komplizierten Inkonsistenz in der Behandlung von Generika zu halten Sie vor dem shooting selbst, egal wie hart Sie versuchen (und wenn jemand weiß, jeder gute Diskussionen über die relativen Vorteile/Nachteile der Ausgabe bitte posten, ich wäre interessiert zu sehen, die Argumente), warum sollte die Aussage (1) zulässig, wenn (2) nicht?

InformationsquelleAutor Steve B. | 2009-01-22
Schreibe einen Kommentar