Gießen Sie ein array von Objekten in ein array von meinen bestimmt Klasse
Nur für die überprüfung, kann mir jemand schnell erklären, was verhindert, dass diese von der Arbeit (auf kompilieren):
private HashSet data;
...
public DataObject[] getDataObjects( )
{
return (DataObject[]) data.toArray();
}
...und was macht dieser die Art und Weise, die funktioniert:
public DataObject[] getDataObjects( )
{
return (DataObject[]) data.toArray( new DataObject[ Data.size() ] );
}
Ich bin mir nicht klar über den Mechanismus bei der Arbeit mit dem Gießen (oder was auch immer es ist), dass das so macht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil
toArray()
erzeugt ein array-Objekt, und Sie können nicht machenObject[]
inDataObject[]
nur durch Umwandlung.toArray(DataObject[])
erstellt ein array vonDataObject
.Und ja, es ist ein Manko der Collections-Klasse und die Art und Weise Generika bugsiert wurden in Java. Sie würden erwarten, dass
Collection<E>.toArray()
könnte, liefert ein array von E, aber es funktioniert nicht.Interessante Sache über die
toArray(DataObject[])
Anruf: Sie müssen nicht, um die "a" - array groß genug, so können Sie es nennen mittoArray(new DataObject[0])
wenn Sie mögen.Nennen es wie
toArray(new DateObject[0])
ist tatsächlich besser, wenn Sie.length
später, um die array-Länge. wenn die erste Länge war groß, und das gleiche array-Objekt, das Sie übergeben war, kehrte dann können Sie GesichtNullPointerException
s späterFragte ich eine Frage, die früher über Java generics, und auf die verwiesen wurde, zu dieser FAQ war sehr hilfreich: http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html
Zu gewährleisten, geben Sicherheit beim casting ein array, wie Sie soll (
DataObject[] dataArray = (DataObject[]) objectArray;
), die JVM müsste prüfen jedes einzelne Objekt in dem array, so dass es nicht wirklich einfach in der Bedienung wie ein type-cast. Ich denke, das ist, warum Sie müssen übergeben Sie den array-Instanz, die dietoArray()
Betrieb füllt.