Heim >Java >javaLernprogramm >Wann sollte ich „' vs. „' in Java Generics verwenden?

Wann sollte ich „' vs. „' in Java Generics verwenden?

Linda Hamilton
Linda HamiltonOriginal
2024-11-22 13:08:13756Durchsuche

When Should I Use `` vs. `` in Java Generics?

Generika und die Verwendung von vs.

In Java ermöglichen Generika typsichere Operationen über einen größeren Bereich von Typen. Bei der Wahl zwischen und in bestimmten Szenarios, wie dem unten dargestellten:

Map<String, Class<? extends Serializable>> expected = null;
Map<String, Class<java.util.Date>> result = null;
assertThat(result, is(expected)); 

Dieser Code kann aufgrund des falschen Argumenttyps nicht kompiliert werden, der an die AssertThat-Methode übergeben wurde, die einen Matcher anstelle von Matcher. Um zu verstehen, warum dies geschieht, müssen wir uns mit dem Konzept der Kovarianz bei generischen Typen befassen.

Kovarianz besagt, dass ein Subtyp sicher einem Supertyp zugeordnet werden kann. Mit anderen Worten, eine Klasse Objekt kann einer Klasse zugewiesen werden Objekt. Das Gegenteil ist jedoch nicht der Fall: Eine Klasse Objekt kann keiner Klasse zugewiesen werden Objekt.

Dies liegt daran, dass Kovarianz nur für den Typparameter selbst gilt, nicht für die darin enthaltenen Typargumente. In unserem Beispiel ist java.util.Date ein Untertyp von Serializable, aber Class ist nicht unbedingt ein Untertyp von Class.

Ändern der Signatur der AssertThat-Methode in Matcher behebt dieses Problem, indem ein Matcher zugelassen wird, der mit jedem Untertyp des tatsächlichen Typs übereinstimmt. Dies bietet die nötige Flexibilität für Situationen wie die im Code-Snippet.

Es ist jedoch wichtig zu beachten, dass die Verwendung von potenzielle Nachteile mit sich bringt. in diesem Zusammenhang. Beispielsweise kann es in bestimmten Szenarien zu unerwartetem Verhalten oder einer verringerten Typensicherheit kommen. Daher sollte es mit Bedacht und mit sorgfältiger Überlegung verwendet werden.

Was die Generizität der AssertThat-Methode betrifft, ermöglicht sie eine Typprüfung, um sicherzustellen, dass der verwendete Matcher mit dem Ergebnistyp kompatibel ist. Dadurch wird die Möglichkeit von Laufzeitfehlern zwar nicht vollständig ausgeschlossen, es erhöht jedoch die Sicherheit, indem inkompatible Übereinstimmungen verhindert werden.

Das obige ist der detaillierte Inhalt vonWann sollte ich „' vs. „' in Java Generics verwenden?. 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