Actually Kotlin knows the difference between the two methods in your example, but jvm will not. That’s why it’s a “platform” clash.
You can make your second example compile by using the @JvmName
annotation:
class Foo {
@JvmName("barString") fun bar(foo: List<String>): String {
return ""
}
@JvmName("barInt") fun bar(foo: List<Int>): String {
return "2";
}
}
This annotation exists for this very reason. You can read more in the interop documentation.