Heim >Java >javaLernprogramm >Warum kann ich in Java keine generischen Arrays erstellen?

Warum kann ich in Java keine generischen Arrays erstellen?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 22:15:31609Durchsuche

 Why Can't I Create Generic Arrays in Java?

Generische Arrays in Java

Arrays und Generika stellen in Java eine Programmierhürde dar. Sie können ein Array parametrischer Typen nicht direkt erstellen. Dies liegt daran, dass Arrays kovariant sind, was bedeutet, dass sie den Typ ihrer Elemente zur Laufzeit beibehalten, während Generics die Typlöschung verwenden.

Eine Problemumgehung besteht darin, Array.newInstance() wie folgt zu verwenden:

private Comparable[] hashtable;

...

hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);

Es ist jedoch wichtig zu beachten, dass diese Lösung nicht ideal ist.

Warum nicht generische Arrays verwenden?

  • Arrays sind kovariant, Generika jedoch nicht .
  • Dies bedeutet, dass ein Array eines Supertyps nicht unbedingt ein Array des Subtyps ist.
  • Zum Beispiel ist ein Object[]-Array nicht unbedingt ein Comparable[]-Array.

Um diese Probleme zu vermeiden, wird empfohlen, bei der Arbeit mit Generika eine ArrayList anstelle eines Arrays zu verwenden. ArrayLists sind kovariant und typsicher, was sie zu einer besseren Wahl für die Speicherung generischer Typen macht.

Eine ausführlichere Erklärung finden Sie in den FAQ zu Java Generics:

Kann ich ein Array erstellen, dessen Komponententyp ein konkreter parametrisierter Typ ist?

Nein, da es nicht typsicher ist.

Arrays sind kovariant, was bedeutet, dass ein Array von Supertyp-Referenzen ein Supertyp eines Arrays von Subtyp-Referenzen ist. Das heißt, Object[] ist ein Supertyp von String[] und auf ein String-Array kann über eine Referenzvariable vom Typ Object[] zugegriffen werden.

Das obige ist der detaillierte Inhalt vonWarum kann ich in Java keine generischen Arrays erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn