Kotlin函数参数中的字符串变量自动转换为java.lang.String,为什么?

我只是用Kotlin写了一些代码,并且遇到了一些问题,这里是测试代码:

fun testString(s: Any) { when(s) { Int -> println("Int parameter!") String -> println("String parameter!") //Boolean -> println("Not boolean thing!") //Why Boolean cannot use in when? else -> println("Other object!") } } var ss = "This is actual a Kotlin String!" println(ss.javaClass.simpleName) //out: String testString(ss)//out: Other object! Why not String??? 

问题是,当只打印变量时,它显示了期望的输出: String (Kotlin) ,但是在testString函数中,输出的那个总是java.lang.String ,这是为什么呢? 那么另一个让我难过的是:布尔什么when不能用? 为什么? 提前致谢!

在when语句中,您将需要检查参数是Int / String / Boolean类型。 所以返回值需要是一个布尔值。 因此,而不是String你需要使用的is String

 fun testString(s: Any) { when(s) { is Int -> println("Int parameter!") is String -> println("String parameter!") is Boolean -> println("boolean thing!") else -> println("Other object!") } } 

那么它也将为布尔值工作。

你忘了

这工作:

 fun testString(s: Any) { when(s) { is Int -> println("Int parameter!") is String -> println("String parameter!") is Boolean -> println("Boolean parameter!") else -> println("Other object!") } } 

详细信息: 类型检查和Casts