Heim >Java >javaLernprogramm >Was ist der Unterschied zwischen `` und `?
In der objektorientierten Programmierung spielen Generics eine entscheidende Rolle bei der Verbesserung der Typsicherheit und der Wiederverwendbarkeit von Code. In Java-Generika ist die Verwendung von Platzhaltern wie erweitert T> und
Betrachten Sie das folgende Beispiel mit JUnit mit Hamcrest-Matchern:
Map<String, Class<? extends Serializable>> expected = null; Map<String, Class<java.util.Date>> result = null; assertThat(result, is(expected));
Dieser Code kann aufgrund eines nicht kompiliert werden Nichtübereinstimmung zwischen den generischen Typparametern in der AssertThat-Methodensignatur und den tatsächlich beteiligten Typen.
Um zu verstehen, warum erweitert T> Wenn das Problem gelöst ist, befassen wir uns mit dem Konzept der Kovarianz. In Java sind Arrays kovariant, was bedeutet, dass, wenn ein Typ T ein Subtyp von S ist, die entsprechenden Arrays T[] und S[] ebenfalls Subtypen sind.
Im gegebenen Beispiel kann die erwartete Karte enthalten sein Instanzen von Class-Objekten, die Unterklassen von Serializable darstellen. Andererseits kann die Ergebniskarte nur Klassenobjekte enthalten, die die Datumsklasse darstellen. Durch die Verwendung von erweitert T>, kann die AssertThat-Methode Matcher akzeptieren, die prüfen, ob ein Wert eine Instanz einer beliebigen Klasse ist, die Serializable erweitert, einschließlich der Date-Klasse Die Methode in JUnit ist generisch, um sicherzustellen, dass ein geeigneter Matcher für den Ergebnistyp übergeben wird. Durch die generische Eingabe als
Beim Wechseln vonassuertThat's Parameterliste zu Matcher erweitert T> Behebt das Kompilierungsproblem, bringt es jedoch einen potenziellen Nachteil mit sich. Diese erweiterte Parameterliste ermöglicht jeden Matcher, der mit einem Typ arbeitet, der T erweitert, was in bestimmten Szenarien zu einer falschen Matching-Logik führen kann.
Verstehen Sie den Unterschied zwischen erweitert T> und
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen `` und `?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!