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

时间:2017-02-15 14:19:57

标签: java string kotlin

我刚刚用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中使用?为什么?提前谢谢!

2 个答案:

答案 0 :(得分:4)

在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!")
    }
}

然后它也适用于布尔值。

答案 1 :(得分:2)

您忘记了is

这有效:

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!")
    }
}

详细信息:Type Checks and Casts