Android中Kotlin使用

    xiaoxiao2023-10-01  160

    从java转kotlin开发Android也有近1年了,不过刚开始用的时候项目紧。随便看了几眼文档就直接开干了。最近通读了几遍文档,发现有很多小细节和规范都不知道,实在惭愧。这里把重要的和一些不常用的记录一下,加深印象。

    不过还是建议大家能够通读两遍官方文档。

    官方文档地址:https://www.kotlincn.net/docs/reference/

     

    1.null处理

    这个应该是我们在使用时能感受到的最核心的优点了。

    其实就是在声明可null的对象时要显式的指明,使用可null对象时要处理null的情况。虽然这样代码量增多了,不过却更严谨了。直接从编码时就杜绝了万恶的“NullPointerException”异常。

    kotlin中null处理两步走:

    1.1 声明时用“?”显式声明是否可以为null

    var a: String = "aaa" //不可以为null var b: String? = "bbb" //可以为null

     

    1.2 在使用可null类型时需要提前处理值为null的情况

    在上一步,如果用“?”声明了变量可以为null,那么在使用时需要提前处理值为null的情况:

    /** * 1.直接使用非空断言运算符"!!",它会将任何值转换为非空类型,若该值为空则抛出"NullPointerException"异常。如非必要,不建议使用。 * 简单理解就是不做任何规避空指针的处理,跟java一样。如果为null,就抛出"NullPointerException"异常 */ b!!.length /** * 2.使用"?"安全调用操作符。当b为null时,该表达式会返回"null",而不是抛出"NullPointerException"异常 */ b?.length //而且该操作符支持链式调用,该表达式任何一个环节为空,都会返回"null" b?.length?.dec()?.inc()?.inv() //安全调用也可以出现在赋值的左侧。这样,如果调用链中的任何一个接收者为空都会跳过赋值,而右侧的表达式根本不会求值 //如下,如果"person"或者"person.department"其中之一为空,都不会调用右侧函数 person?.department?.head = managersPool.getManager() /** * 3.手动判断是否为null */ //例如,如下表达式表示,如果b不为null则返回 b.length,否则返回 -1 val l: Int = if (b != null) b.length else -1 //还可以用Elvis操作符简写,跟上式等价 val l2 = b?.length ?: -1 //还可以用内联函数let b?.let {//只有当b不为null才会调用里面的代码 println(it) }

     

    1.3 其他相关

    (1)安全的类型转换

    如果对象不是目标类型,那么常规类型转换可能会导致 ClassCastException。 另一个选择是使用安全的类型转换,如果尝试转换不成功则返回null:

    val aInt: Int? = a as? Int //当类型无法转换时不抛ClassCastException异常,而是返回null

     

    (2)可空类型的集合

    如果你有一个可空类型元素的集合,并且想要过滤非空元素,你可以使用 filterNotNull 来实现:

    val nullableList: List<Int?> = listOf(1, 2, null, 4) val intList: List<Int> = nullableList.filterNotNull()

     

    2.注释编写规范

    Kotlin中建议把参数加在方法描述中,如下:

    // 避免这样: /** * Returns the absolute value of the given number. * @param number The number to return the absolute value for. * @return The absolute value. */ fun abs(number: Int) = …… // 而要这样: /** * Returns the absolute value of the given [number]. */ fun abs(number: Int) = ……

    其实这样更易阅读,可以试着这么写。

     

     

    待续~~

    最新回复(0)