2017-02-15 16 views
0

私はちょうどKotlinといくつかのコードを書いた、といくつかの問題を持って、ここでのテストコードです:Kotlin関数パラメータの文字列変数がjava.lang.Stringに自動キャストされます、なぜですか?

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になります。その理由は? もう1つ私はそれを混乱させる:ブールはwhenで使用できませんか?なぜ?前もって感謝します!

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

詳細:あなたはis

を忘れてしまったこの作品

答えて

4

はint型/文字列/ 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!") 
    } 
} 

そして、それはまた、ブールのために動作します。

+0

それは私のために働く、多くのありがとう!!! – SpkingR

2

あなたは、パラメータ天気を確認する必要がありますとき、声明の中でType Checks and Casts

+0

ありがとう、それがポイントです、もう一度ありがとうございます。 – SpkingR

関連する問題