0

Type mismatch with readline

In my code below I create three Strings. Then I use readLine to assign values to them. But the last example fails. It say there is a type mismatch with String and String was expected. And this is what I don't understand. https://sololearn.com/compiler-playground/czatpms38ko8/?ref=app

5th Jul 2024, 9:27 PM
Stefanoo
Stefanoo - avatar
3 odpowiedzi
+ 3
readLine in Kotlin returns a nullable string readLine():String? because the input might be null. so it is not type String but type String?. This is an additional safety guard so that readLine can handle null values. Thus your error message. You can modify c to var c: String? you can also use ?: in readLine() to provide a default value if null. var s = readLine()?:"sometext"
5th Jul 2024, 11:00 PM
Bob_Li
Bob_Li - avatar
+ 3
fun main() { var a : String var b : String var c : String? var d : String a = readLine()!! // works b = readLine().toString() // works c = readLine() // works now d = readLine()?:"42" println(a) println(b) println(c) println(d) }
5th Jul 2024, 11:06 PM
Bob_Li
Bob_Li - avatar
+ 3
Kotlin is very strict in typing that String? And String aren't the same. In kotlinville, the former with the question mark is called the "nullable" and its the Union set of a string and null data type. Now when dealing with nullable, extra conditions must be checked for both null and the real cases. The operator !, ?: !!, If-else, ternary can be used. I've seen advanced kotliner using the let statement too. For example readLine()?.let { println(it) }
5th Jul 2024, 11:09 PM
Mel