相关疑难解决方法(0)

Kotlin和惯用的写法,'if not not null,else ......'基于可变值

假设我们有这个代码:

class QuickExample {

    fun function(argument: SomeOtherClass) {
        if (argument.mutableProperty != null ) {
            doSomething(argument.mutableProperty)
        } else {
            doOtherThing()
        }
    }

    fun doSomething(argument: Object) {}

    fun doOtherThing() {}
}

class SomeOtherClass {
    var mutableProperty: Object? = null
}
Run Code Online (Sandbox Code Playgroud)

与Java不同,在运行时可以单独担心空解除引用,这不能编译 - 非常正确.当然,mutableProperty在'if'中可能不再为null.

我的问题是处理这个问题的最佳方法是什么?

有一些选择很明显.在不使用任何新的Kotlin语言功能的情况下,最简单的方法显然是将值复制到随后不会更改的方法范围.

有这个:

fun function(argument: SomeOtherClass) {
    argument.mutableProperty?.let {
        doSomething(it)
        return
    }
    doOtherThing()
}
Run Code Online (Sandbox Code Playgroud)

这有一个明显的缺点,你需要提前返回或以其他方式避免执行后续代码 - 确定在某些小的情况下,但它有一股气味.

然后有这种可能性:

fun function(argument: SomeOtherClass) {
    argument.mutableProperty.let {
        when {
            it != null -> {
                doSomething(it)
            }
            else -> {
                doOtherThing() …
Run Code Online (Sandbox Code Playgroud)

android idioms kotlin

26
推荐指数
6
解决办法
1万
查看次数

标签 统计

android ×1

idioms ×1

kotlin ×1