Heim >Java >javaLernprogramm >Wann sollte ich „' vs. „' in Java Generics verwenden?
Generika und die Verwendung von
In Java ermöglichen Generika typsichere Operationen über einen größeren Bereich von Typen. Bei der Wahl zwischen
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 erweitert T> anstelle von Matcher
Kovarianz besagt, dass ein Subtyp sicher einem Supertyp zugeordnet werden kann. Mit anderen Worten, eine Klasse erweitert Serializable> Objekt kann einer Klasse zugewiesen werden erweitert T> Objekt. Das Gegenteil ist jedoch nicht der Fall: Eine Klasse erweitert T> Objekt kann keiner Klasse zugewiesen werden erweitert Serializable> 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 erweitert Serializable> ist nicht unbedingt ein Untertyp von Class erweitert Date>.
Ändern der Signatur der AssertThat-Methode in Matcher erweitert T> 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
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!