I don't think anything should be completely avoided. Casting from one type to another is of course necessary, but it's so easy and consise to do explicitly in Kotlin, there's no need to pollute the language with implicit conversions when they have significant downsides.