The reason for this is because the Kotlin compiler will map the Java platform type (e.g. java.util.ArrayList() ) to the platform-independent Kotlin platform ( kotlin.collections.List ). Unsurprisingly, therefore they are called Mapped Types .
The key to understanding is that after compilation you only need binary compatibility. If all Kotlin code on the java platform uses the java.util.List interface when using the kotlin.collections.List object, stack manipulations on the java engine work just fine. The same is true in the opposite direction.
As for the other direction: as this question indicates, at least on the Java platform, kotlin.collections.ArrayList is essentially typealias for java.util.ArrayList .
blubb source share