I am encountering an issue with Kotlin\'s type system. I declared the variable as below at class scope:
var planets: ArrayList? = null
<
At least one of the planets (earth, mars, saturn, jupiter, uranus, neptune, pluto) is of nullable type Planet? hence the inferred type of arrayListOf(earth, ...) is ArrayList.
Since ArrayList is not contravariant on type Planet it cannot be safely to assigned with value ArrayList.
To resolve the problem you can:
Planetif the above is not feasible change
var planets: ArrayList? = null
to
var planets = arrayListOf()
filter out null planets and then assign the result collections to planets:
planets = arrayListOf(*arrayListOf(earth, ...).filterNotNull().toTypedArray())
Another way to make the compiler happy is to make the planets contravariant like so:
var planets: ArrayList? = null
PS. Use kotlin collection types List, Set and corresponding listOf, setOf instead of Java's counterparts whenever possible.