相关疑难解决方法(0)

在Kotlin中,处理可空值,引用或转换它们的惯用方法是什么

如果我有一个可空类型Xyz?,我想引用它或将其转换为非可空类型Xyz.在Kotlin这样做的惯用方法是什么?

例如,此代码出错:

val something: Xyz? = createPossiblyNullXyz()
something.foo() // Error: "Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type Xyz?"
Run Code Online (Sandbox Code Playgroud)

但是,如果我首先检查null是允许的,为什么?

val something: Xyz? = createPossiblyNullXyz()
if (something != null) {
    something.foo() 
}
Run Code Online (Sandbox Code Playgroud)

假设我确定它确实从未如此,如何null在不需要if检查的情况下更改或处理值null?例如,在这里,我从地图中检索一个我可以保证存在的值而结果get()不是null.但是我有一个错误:

val map = mapOf("a" to 65,"b" to 66,"c" to 67)
val something = map.get("a")
something.toLong() // Error: "Only safe (?.) or non-null asserted (!!.) calls …
Run Code Online (Sandbox Code Playgroud)

nullable non-nullable kotlin

159
推荐指数
1
解决办法
5万
查看次数

如何在 kotlin 中检查可为 null 的布尔值

如果我想检查一个可为空的,Boolean我会得到一个type mismatch

var bool: Boolean? = true

if(bool) 
  println("foo") 
else 
  println("bar")
Run Code Online (Sandbox Code Playgroud)

因为Boolean is expected不是Boolean?

kotlin

4
推荐指数
1
解决办法
5098
查看次数

Kotlin:表达“`String?` 包含`String`”的最佳方式

可能只是Use of Boolean? 在 if 表达式中,但我对 Kotlin 了解不够,无法知道它是否是...

我想测试是否body : String?包含expected : String作为子字符串。(如果bodynull,那么它不包含子字符串。)我发现我可以这样写我的条件:

    if (body?.contains(expected) == true) {
        succeed()
    }
Run Code Online (Sandbox Code Playgroud)

或者像这样:

    if (body?.contains(expected) != true) {
        fail()
    }
Run Code Online (Sandbox Code Playgroud)

body?.contains(expected)type 的表达式在哪里Boolean?),但这真的是编写这种条件的最佳最惯用的方式吗?是否有任何替代方案(可能使用 的其他成员函数String)对眼睛更容易?

readability kotlin

1
推荐指数
1
解决办法
109
查看次数

标签 统计

kotlin ×3

non-nullable ×1

nullable ×1

readability ×1