「ジェネリクス: 共変 (covariant) と不変 (invariant) について理解する」を読んでの感想です
URLはこちら:https://maku77.github.io/kotlin/generics/variant.html
全体の感想としては、共変、不変という言葉が悪いのか頭に入ってことないですね・・
・共変(covariant)
型パラメータが共変である場合、サブタイプ関係が保たれます。 例えば、List
は共変であり、List<Int>
はList<Any>
として扱えます。 これは、List
が要素の取得のみを行い、要素の追加を許可しないため、型の安全性が保たれるからです。
・不変(invariant)
型パラメータが不変である場合、サブタイプ関係は保たれません。 MutableListは不変であり、MutableList<Int>はMutableList<Any>として扱えません。 これは、MutableListが要素の追加を許可するため、異なる型の要素が追加されると型の安全性が損なわれる可能性があるからです。
ジェネリックを使ってクラスを作成する場合には覚える必要があるのでしょうが、何度か使わないと頭に入ってことなそうです。