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:
Planet
if 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.