Ich bemerkte, dass in Java Array.newInstance()
Object
zurückgibt, anstatt T[]
. Es ist verständlich, dass diese Methode eingeführt wurde, bevor Java generische Typen unterstützt.Gibt es eine generische Version von Array.newInstance?
Es ist jedoch eine Überraschung, dass es keine entsprechende generische Version von diesem gibt. Java 7's Arrays.copyOf
ist nicht das gleiche - es kopiert den Inhalt des Parameters, anstatt ein neues Dummy-Array (mit allen Null-Objekten innerhalb) zu erstellen.
Da die Implementierung von diesem scheint trivial, gibt es keinen Grund, es nicht in die JRE hinzufügen? oder ich kann einfach keinen finden?
UPDATE
Es scheint, werde ich meine eigene "trivial" Umsetzung misunderstand die Frage zu stoppen bieten.
Ich poste diesen Code nicht als Antwort, weil es nicht die Antwort der Frage ist. Die Frage bezieht sich auf den Grund und/oder den vorhandenen Code, nicht auf die Implementierung.
UPDATE
Ich habe den Code aktualisiert, um es zu Arrays.copyOf
ähnlich zu machen, und der Vorteil ist, kann der Programmierer einfach den Typ des Parameters ändern Sie den Code für eine andere Art einzustellen. Außerdem habe ich die Verwendung von Array.newInstance
für primitive Typen eliminiert.
Nein, es ist unmöglich, dies kompilierungssicher zu implementieren. Zum Beispiel können Sie keine neue Instanz von a erstellen: 'List []'. Der Compiler wird nie wissen, was der Typ von "T" ist und kann daher nicht garantieren, dass der Client-Code sicher ist. –
Muel
Da 'Arrays.copyOf' die Aufgabe erledigen kann, gibt es keinen offensichtlichen Grund, den Sie nicht haben können. –
'Arrays.copyOf' bestimmt den konkreten Typ aus dem zu kopierenden Array. – pstanton