Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2019-12-02:Kotlin中该如何安全地处理可空类型?

Moosphan opened this issue · comments

2019-12-02:Kotlin中该如何安全地处理可空类型?

a?.let{

}

not know

对于方法传入的参数直接通过if判断,例如:

fun a(tag: String?, type: String) {
    if (tag != null && type != null){
        // do something
    }
}

还有就是

a?.let{}
a?.also{}
a?.run{}
a?.apply{}

然后接着有一个疑问,假如同时判断两个变量,写成:

a?.let{
    b?.let{
        //do something
    }
}

这样似乎有点不够优雅,想看看大家有什么优雅的写法

对于方法传入的参数直接通过if判断,例如:

fun a(tag: String?, type: String) {
    if (tag != null && type != null){
        // do something
    }
}

还有就是

a?.let{}
a?.also{}
a?.run{}
a?.apply{}

然后接着有一个疑问,假如同时判断两个变量,写成:

a?.let{
    b?.let{
        //do something
    }
}

这样似乎有点不够优雅,想看看大家有什么优雅的写法

takeif

commented

补充一点,尽量不要出现空,也就不需要处理空,参考 Java 的空对象模式

commented

另外注意在调用java方法时对返回值进行处理;最好在方法加上@nullable@NotNull 注解

对于方法传入的参数直接通过if判断,例如:

fun a(tag: String?, type: String) {
    if (tag != null && type != null){
        // do something
    }
}

还有就是

a?.let{}
a?.also{}
a?.run{}
a?.apply{}

然后接着有一个疑问,假如同时判断两个变量,写成:

a?.let{
    b?.let{
        //do something
    }
}

这样似乎有点不够优雅,想看看大家有什么优雅的写法

takeif
这样写比较优雅了

fun <T1, T2> ifNotNull(value1: T1?, value2: T2?, bothNotNull: (T1, T2) -> (Unit)) {
if (value1 != null && value2 != null) {
bothNotNull(value1, value2)
}
}