# Nullable contravariant

**URL:** <https://discuss.kotlinlang.org/t/nullable-contravariant/19832>\
**Category:** Language Design\
**Created:** [November 6, 2020, 10:20pm UTC](https://discuss.kotlinlang.org/t/nullable-contravariant/19832 "2020-11-06T22:20:03Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![marcincinik](https://avatars.discourse-cdn.com/v4/letter/m/b5e925/32.png) [@marcincinik](https://discuss.kotlinlang.org/u/marcincinik)\
**Post date:** [November 6, 2020, 10:20pm UTC](https://discuss.kotlinlang.org/t/nullable-contravariant/19832/1 "2020-11-06T22:20:03Z")

</div>

Hi,

I can’t grasp how to get this compiling  
class Foo() {  
fun doit(t: Foo): Unit {}  
}

```
val a = Foo<Int?>().doit(Foo<Int>())

```

I have been trying the ‘out’ contravariance, but nothing works.

---

<div class="post-metadata">

**Author:** ![madmax1028](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/madmax1028/32/3335_2.png) [@madmax1028](https://discuss.kotlinlang.org/u/madmax1028)\
**Post date:** [November 7, 2020, 12:06am UTC](https://discuss.kotlinlang.org/t/nullable-contravariant/19832/2 "2020-11-07T00:06:28Z")

</div>

First of all `out` keyword coresponds to covariance, not contravariance 😉 I’m not sure what you plan to implement as a whole, but to make this snippet compile you can write this:

```kotlin
class Foo<T> {
	fun doit(t: Foo<out T>) = Unit
}

val a = Foo<Int?>().doit(Foo<Int>())

```

---

<div class="post-metadata">

**Author:** ![marcincinik](https://avatars.discourse-cdn.com/v4/letter/m/b5e925/32.png) [@marcincinik](https://discuss.kotlinlang.org/u/marcincinik)\
**Post date:** [November 7, 2020, 9:34am UTC](https://discuss.kotlinlang.org/t/nullable-contravariant/19832/3 "2020-11-07T09:34:48Z")

</div>

Thanks. That clarifies a lot.  
Thanks for the swift response.

It seems so obvious now. The documentation page doesn’t enough cover generics being used in method parameters IMHO.
