Is there a Kotlin equivalent of Boolean.valueOf()
of java? The closest I found was .toBoolean()
.
But if the string is null .toBoolean()
would create a NPE.
Did anyone come across this? Am I missing something understanding?
You can use toString() function to convert a Boolean object into its equivalent string representation. You will need this conversion when assigning a true or false value in a String variable.
A straightforward approach to checking nullable Boolean variables in if statements is comparing the variable with the expected value. The check above routes the processing to two branches: the “true” and the “false or null” case. Comparing to “b != null && b!!
public static Boolean valueOf(String s) Returns a Boolean with a value represented by the specified string. The Boolean returned represents a true value if the string argument is not null and is equal, ignoring case, to the string "true" . Parameters: s - a string.
String.toBoolean
Returns true if the contents of this string is equal to the word "true", ignoring case, and false otherwise.
In Kotlin, a String is never null, so you don't have to check it. This returns a Boolean (true only if string value is 'true')
myString.toBoolean()
Now if you have a String? type and want a Boolean
myString?.toBoolean() ?: false
If you are ok with a Boolean? type returned
myString?.toBoolean()
It is, as already mentioned, .toBoolean()
.
It works pretty simple: if the value of a String is true
, ignoring case, the returning value is true
. In any other case, it's false. Which means, if the string isn't a boolean, it will return false.
Kotlin essentially has two variations of types: Any
and Any?
. Any
can of course be absolutely any class, or referring to the actual class Any
.
toBoolean
requires a String
, which means a non-null String. It's pretty basic:
val someString = "true"
val parsedBool = someString.toBoolean()
It gets slightly more complicated if you have nullable types. As I mentioned, toBoolean
requires a String
. A String?
!= String
in these cases.
So, if you have a nullable type, you can use the safe call and elvis operator
val someString: String? = TODO()
val parsedBool = someString?.toBoolean() ?: false
Or, if you can live with a nullable boolean, you don't need the elvis operator. But if the String is null, so will the boolean be.
Just an explanation of the above:
someString?.//If something != null
toBoolean() // Call toBoolean
?: false // Else, use false
Also, you can't compile a program that uses toBoolean
on a nullable reference. The compiler blocks it.
And finally, for reference, the method declaration:
/**
* Returns `true` if the contents of this string is equal to the word "true", ignoring case, and `false` otherwise.
*/
@kotlin.internal.InlineOnly
public actual inline fun String.toBoolean(): Boolean = java.lang.Boolean.parseBoolean(this)
You should know if it is null
before the call, because you are either dealing with a String
or a String?
. ?
is the suffix that Kotlin uses to designate nullable types.
If you have a String
, then you should be able to use toBoolean()
.
If you have a String?
— and so you may have a value or you may have null
— you could use a null-safe call plus the Elvis operator to specify what value you want if the String?
is null
:
val foo: String? = "true"
val bar: String? = null
println(foo?.toBoolean())
println(bar?.toBoolean() ?: false)
This prints:
true
false
bar?.toBoolean()
evaluates to null
, and null ?: false
evaluates to false
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With