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