Переменная Kotlin String в параметре функции auto cast to 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 , поэтому? Тогда другой меня расстраивает: Boolean не может использовать 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!") } } 

Подробнее: Тип чеков и бросок

Intereting Posts
@CreationTimestamp и @UpdateTimestamp не работают в Котлине У вас может быть пустой конструктор или конструктор, параметры которого соответствуют полям Конвертировать проект Android для использования Gradle Script Kotlin В чем разница между объектом и объектом данных? groovy не может разрешить классы kotlin В Kotlin Как читать и анализировать json-файл Как сбросить FrameLayout или удалить кеш макета Можно ли указать статическую функцию в интерфейсе Kotlin? Свойства расширения Kotlin не работают в скрипте Kotlin Не удалось найти классы Котлина в функциональном модуле из другого модуля Класс данных Kotlin от Json с использованием GSON StackOverflowError с двунаправленными ссылками JPA в Котлине String.intern () возвращает разные значения в драйвере JDBC Подавить «Использовать синтаксис доступа к свойствам» для метода или класса Экземпляр экземпляра Kotlin имеет значение null при доступе к Spring-классу Spring