Umfassendes Verständnis von Kovarianz und Kontravarianz
Kovarianz und Kontravarianz in der objektorientierten Programmierung ermöglichen das Ersetzen verschiedener Typen in verschiedenen Situationen unter Wahrung der Typsicherheit.
Kovarianz
Kovarianz gilt, wenn ein „Supertyp“ (allgemeiner) als Ersatz für einen „Subtyp“ (spezifischer) an der Ausgabeposition verwendet wird (z. B. als Rückgabewert). In diesem Fall können Sie eine Liste mit Supertypen einer Liste mit Untertypen zuweisen:
<code class="language-java">List<Fruit> fruits = new ArrayList<>(); List<Apple> apples = fruits; // 协变:List<Apple> 是 List<Fruit> 的子类型</code>
Kontravarianz
Kontravarianz gilt, wenn ein „Subtyp“ als Ersatz für einen „Supertyp“ an der Eingabeposition verwendet wird (z. B. als Methodenparameter). In diesem Fall können Sie einen Lambda-Ausdruck, der einen Untertyp akzeptiert, an einen Lambda-Ausdruck übergeben, der einen Supertyp erwartet:
<code class="language-java">Comparator<Apple> compareApples = (a, b) -> a.compareTo(b); Comparator<Fruit> compareFruits = compareApples; // 逆变:Comparator<Apple> 是 Comparator<Fruit> 的子类型</code>
Schlüsselwörter „in“ und „out“
Die Schlüsselwörter „in“ und „out“ in Generika werden verwendet, um die Varianz von generischen Parametern anzugeben. „out“ bedeutet Kovarianz, „in“ bedeutet Kontravarianz.
Im Beispiel der MyInterface
-Schnittstelle:
<code class="language-java">interface MyInterface<out T> { T get(); // T 可以是 T 的原始类型的任何子类型 }</code>
<code class="language-java">interface MyInterface<in T> { void set(T value); // T 必须是 T 的原始类型的子类型 }</code>
Zusammenfassend lässt sich sagen, dass Kovarianz und Kontravarianz eine sichere Typsubstitution basierend auf der beabsichtigten Verwendung des generischen Typs ermöglichen und so die Typsicherheit gewährleisten und gleichzeitig Flexibilität beim Codedesign bieten.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Kovarianz und Kontravarianz in der objektorientierten Programmierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!