Generische Arrays in Java: Ein umfassender Einblick
Java-Arrays und Generics scheinen auf den ersten Blick möglicherweise inkompatibel zu sein. Während Generika Typsicherheit und Flexibilität ermöglichen, sind Arrays in Java von Natur aus kovariant, was bedeutet, dass sie zur Laufzeit den genauen Typ ihrer Elemente beibehalten. Dies stellt eine Herausforderung dar, wenn Sie versuchen, Arrays generischer Typen zu erstellen.
Bedenken Sie den folgenden Codeausschnitt:
<code class="java">public class Hash<T extends Comparable<String>> { private T[] hashTable; // ... }</code>
Dieser Code versucht, ein Array generischer Objekte zu erstellen, die Comparable erweitern. Allerdings erlaubt Java nicht die Umwandlung eines Objekt-Arrays in ein Array eines parametrisierten Typs, wie aus der Fehlermeldung hervorgeht, die während der Kompilierung erscheint:
java.lang.Object; cannot be cast to [Ljava.lang.Comparable;
Um dieses Problem zu umgehen, könnte man das Array verwenden. newInstance()-Methode:
<code class="java">private Comparable[] hashtable; // ... hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);</code>
Dieser Ansatz erstellt jedoch immer noch kein Array des parametrisierten Typs. Arrays in Java sind zur Laufzeit typsicher, sodass sie nicht nach Belieben in einen anderen Typ umgewandelt werden können.
Generika in Java unterliegen einer Typlöschung, bei der Typparameter während der Kompilierung entfernt werden. Dadurch wird sichergestellt, dass Arrays ihre spezifischen Elementtypen beibehalten, wodurch eine unbeabsichtigte Umwandlung verhindert wird. Daher ist es nicht möglich, ein Array eines bestimmten parametrisierten Typs zu erstellen.
In diesem speziellen Fall wird empfohlen, ArrayList anstelle von Arrays zu verwenden. ArrayLists bieten dynamische Größenanpassung, generische Unterstützung und sind für die meisten Szenarien besser geeignet.
Eine ausführliche Erklärung dieses Problems finden Sie in den häufig gestellten Fragen zu Java Generics: https://docs.oracle.com/javase/7 /docs/technotes/guides/generics/faq.html#CanIcreateanarraywhosecomponenttypeisaconcreteparameterizedtype
Das obige ist der detaillierte Inhalt vonKann ich in Java ein Array eines parametrisierten Typs erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!