Kotlin中的Java Boolean.valueOf()是否等效?

时间:2018-08-10 22:01:06

标签: java android kotlin

是否有Kotlin等效于Java的Boolean.valueOf()?我找到的最接近的是.toBoolean() 但是,如果字符串为null,则toBoolean()将创建一个NPE。

有人遇到吗?我缺少了解吗?

3 个答案:

答案 0 :(得分:5)

如上所述,它是.toBoolean()

它的工作非常简单:如果字符串的值为true,则忽略大小写,返回值为true。在任何其他情况下,这都是错误的。这意味着,如果字符串不是布尔值,它将返回false。

Kotlin本质上具有两种类型的变体:AnyAny?Any当然可以绝对是任何类,或指的是实际的类Any

toBoolean需要一个String,表示一个非空字符串。这很基本:

val someString = "true"
val parsedBool = someString.toBoolean()

如果您具有可为空的类型,它将变得稍微复杂一些。如前所述,toBoolean需要一个String。在这种情况下,String?!= String

因此,如果您具有可为空的类型,则可以使用安全调用和elvis运算符

val someString: String? = TODO()
val parsedBool = someString?.tooBoolean() ?: false

或者,如果您可以使用可为空的布尔值,则不需要elvis运算符。但是,如果String为null,则布尔值将为null。

仅对以上内容进行解释:

someString?.//If something != null
    toBoolean() // Call toBoolean
    ?: false // Else, use false

此外,您不能编译在可空引用上使用toBoolean的程序。编译器将其阻止。


最后,方法声明供参考:

/**
 * 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)

答案 1 :(得分:3)

String.toBoolean

如果此字符串的内容等于单词“ true”(不区分大小写),则返回true,否则返回false。

在Kotlin中,字符串永远不会为null,因此您不必检查它。这将返回一个布尔值(仅当字符串值为“ true”时才为true)

myString.toBoolean()

现在,如果您有字符串?输入并想要一个布尔值

myString?.toBoolean() ?: false

是否可以使用布尔值?返回类型

myString?.toBoolean()

答案 2 :(得分:1)

在通话之前,您应该知道它是否为null,因为您正在处理StringString??是Kotlin用于指定可为空的类型的后缀。

如果您有String,则应该可以使用toBoolean()

如果您有一个String?(因此您可能有一个值或您有null),则可以使用null安全调用加Elvis运算符来指定想要的值,如果String?null

val foo: String? = "true"
val bar: String? = null

println(foo?.toBoolean())
println(bar?.toBoolean() ?: false)

此打印:

true
false

bar?.toBoolean()的值为null,而null ?: false的值为false