Dies ist keine Kotlin-spezifische Frage, aber ich würde gerne besser verstehen, warum ich Deklaration-Site-Varianz (kovariante und kontravariante) verwenden würde. Ich verstehe, wie man sie benutzt, ich sehe einfach keinen großen Nutzen oder in diesem Fall sollte ich einen über den anderen wählen und warum ich nicht ständig die Verwendung der Site-Varianz verwenden möchte.Warum Declaration-Site Variance verwenden
Antwort
Die Deklarations-Site erleichtert es den Clients, eine Klasse mit generischem Typ zu verwenden, da Sie nicht über die Varianz nachdenken müssen, wenn der Ersteller die Entscheidung bereits beim Erstellen getroffen hat. Bei der Arbeit mit einer solchen generischen Klasse kann der Compiler sich über mögliche Abweichungen sicher sein.
//declaration-site
abstract class ReadableList<out T> {
abstract fun get(): T
}
fun workWithReadableList(strings: ReadableList<String>) {
val objects: ReadableList<Any> = strings // This is OK, since T is an out-parameter, ReadableList is covariant in its type T
// ...
}
haben Sie einen Blick auf die ausführliche Nutzung Ort Java-Syntax. Viele Menschen kennen nicht einmal den Unterschied zwischen super
und extends
oder was Varianz bedeutet. Kotlins Schlüsselwörter in
und out
sind ein bisschen anschaulicher und werden auch in anderen Sprachen verwendet.
Danke für die Klärung. Ich betrachtete es als Deklaration-Site-Varianz in einer Sammlung verwenden, aber es sollte als eine Klasse betrachtet werden. – BigApeWhat
- 1. Wie var/variance Funktion in Gürteltier verwenden
- 2. Scala type variance example
- 3. Scala 2.11 Typ Variance Änderungen
- 4. Warum selbstausführende Funktion verwenden?
- 5. Warum Leute ProjectData verwenden
- 6. Warum JSP/Servlets verwenden?
- 7. Warum Endlosschleifen verwenden?
- 8. Warum Prism verwenden?
- 9. Warum FindControl verwenden ...?
- 10. Warum verwenden wir setLayoutParams?
- 11. Warum Zugriffsmodifikatoren verwenden
- 12. Warum # 'mit Lambda verwenden?
- 13. Warum verwenden wir Serialisierung?
- 14. Warum DialogFragment verwenden?
- 15. Warum verwenden wir HTTP?
- 16. Warum das Besuchermuster verwenden?
- 17. ReactJS: Warum this.props.children verwenden?
- 18. Warum verwenden wir tf.name_scope()
- 19. C++ Warum Referenz verwenden?
- 20. Warum Redux-Thunk verwenden?
- 21. Warum Asprintf verwenden?
- 22. Mysql warum utf8_slovenian_ci verwenden?
- 23. Warum mysqli_close() verwenden?
- 24. Warum QObject :: setObjectName() verwenden?
- 25. Warum Kurzschlusscode verwenden?
- 26. Warum Föderationsanbieter verwenden?
- 27. Warum verwenden Sie document.write?
- 28. C# Warum SuspendLayout() verwenden?
- 29. Warum scala.collection.immutable.Stack verwenden
- 30. Warum hexadezimale Konstanten verwenden?
Ich weiß nicht, ob Sie die Generika-Abschnitt in den Kotlin-Dokumenten gelesen haben, es hat viel für mich in diesem Bereich aufgeklärt. https://kotlinlang.org/docs/reference/generics.html – Neil