Signing you in…

Covariance and Contravariance (in/out)

Variance answers: if Dog is a subtype of Animal, is List<Dog> a subtype of List<Animal>? In Kotlin, generic types are invariant by default — List<Dog> is not List<Animal> for mutability safety. Use out (covariant) when you only produce T — read-only. Use in (contravariant) when you only consume T — like Comparator<Animal> accepting Comparator<Dog>.

out — producers
Content is available with subscription.
Get full access to all courses on the platform for one year with a single payment.
Unlike other platforms that charge per course, here you get everything for one price, and after one year of use there will be no automatic charge for the following year.