有没有相当于 JavaBoolean.valueOf()
的 Kotlin?我找到的最接近的是.toBoolean()
.
但如果字符串为空.toBoolean()
将创建一个 NPE。
有人遇到过这个吗?我错过了一些理解的东西吗?
如前所述,它是.toBoolean()
.
它的工作原理非常简单:如果字符串的值为true
,忽略大小写,则返回值为true
。在任何其他情况下,它都是错误的。这意味着,如果字符串不是布尔值,它将返回 false。
Kotlin 本质上有两种类型变体:Any
和Any?
。Any
当然可以是绝对任何类,也可以是指实际的类Any
。
toBoolean
需要一个String
,这意味着一个非空字符串。这是非常基本的:
val someString = "true"
val parsedBool = someString.toBoolean()
如果您有可为空的类型,它会稍微复杂一些。正如我所提到的,toBoolean
需要一个String
。在这些情况下,String?
!=String
。
因此,如果您有可为 null 的类型,则可以使用 safe 调用和 elvis 运算符
val someString: String? = TODO()
val parsedBool = someString?.toBoolean() ?: false
或者,如果您可以使用可为空的布尔值,则不需要猫王运算符。但是,如果字符串为空,则布尔值也将为空。
只是对上述内容的解释:
someString?.//If something != null
toBoolean() // Call toBoolean
?: false // Else, use false
此外,不能编译在可为 null 的引用上使用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)
String.toBoolean
如果此字符串的内容等于单词"true",则返回 true,忽略大小写,否则返回 false。
在 Kotlin 中,字符串永远不会为空,因此您不必检查它。 这将返回一个布尔值(仅当字符串值为"true"时才为 true(
myString.toBoolean()
现在,如果你有一个字符串?类型并想要一个布尔值
myString?.toBoolean() ?: false
如果你对布尔值没问题? 返回的类型
myString?.toBoolean()
您应该知道它是否在调用之前null
,因为您正在处理String
或String?
。?
是 Kotlin 用来指定可为空类型的后缀。
如果你有一个String
,那么你应该能够使用toBoolean()
.
如果你有一个String?
——所以你可能有一个值,或者你可能有null
——你可以使用 null-safe 调用加上 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
。