2017-02-15 2 views
0

ich nur einen Code mit Kotlin schrieb, und bekam einige Probleme, hier ist der Testcode:Kotlin String-Variable in Funktionsparameter Auto-Cast in java.lang.String, warum?

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??? 

Das Problem ist, dass, wenn nur die Variable drucken, die erwartete Ausgabe zeigt: String (Kotlin), aber in der testString Funktion, die Ausgabe wird immer die java.lang.String, warum? Dann ein anderes ärgert mich ist das: Boolean kann nicht in when? und warum? Danke im Voraus!

Antwort

4

In der when-Anweisung müssen Sie prüfen, ob der Parameter vom Typ Int/String/Boolean ist. Der Rückgabewert muss also ein boolescher Wert sein. So statt String müssen Sie is String verwenden:

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

dann auch für Boolesche es wird funktionieren.

+0

Das funktioniert für mich, vielen Dank !!! – SpkingR

2

Sie haben vergessen is

Dies funktioniert:

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

Details: Type Checks and Casts

+0

Danke, das ist der Punkt, danke nochmal. – SpkingR

Verwandte Themen