Android开发者需要掌握的Kotlin开发技巧你知道吗?

1.嵌套函数

业务开发中,我们可能会遇到这样一个场景:一个函数只会被某一处多次调用,且不想让这个函数在该类的其他地方调用,这个时候就需要对这个函数的访问性进行进一步限制。

private是无法满足的,这个时候我们就可以使用嵌套函数提供更好的封装:

fun test1() {

    //被限制访问行的函数
    fun test2(content: String) {
        println(content)
    }

    test2("hahaha")
    test2("babababa")
    test2("uuuuuuu")
} 

这时候,只有test1()能够被访问,test2()是无法被除了test1()外的其他地方进行访问的

不过这样test2()方法体过大会导致test1()方法太长,所以嵌套函数要根据具体场景选择性使用

2.@JvmOverloads快捷实现函数重载

Android自定义View时,一般需要定义三个构造方法:

class CustomView : View {
    constructor(context: Context) : super(context)
    constructor(context: Context, attributes: AttributeSet? = null) : super(context, attributes)
    constructor(context: Context, attributes: AttributeSet? = null, defStyleAttr: Int) : super(
        context,
        attributes,
        defStyleAttr
    )
} 

每次自定义View都这样写过于麻烦,这个时候就可以借用@JvmOverloads实现运算符重载:

class CustomView @JvmOverloads constructor(
    context: Context,
    attributes: AttributeSet? = null,
    defStyleAttr: Int = 0
) : View(context, attributes, defStyleAttr) {
} 

反编译成java代码看下:

image.png

可以看到,kotlin编辑器会自动帮助我们生成三个重载构造方法。

PS:@JvmOverloads使用在基于已有的WebViewEditText等组件自定义View时,一定要注意第三个参数defStyleAttr默认值时不一定为0的,需要根据继承的父类组件填充正确的参数

3.延迟初始化lateinit var

日常开发中,我们会使用lateinit var实现属性的延迟初始化:

lateinit var mContent: String

mContent = "test test" 

使用延迟初始化的属性,当我们不确定这个属性有没有被初始化,可以通过下面方式判断:

//判断mContent有没有被初始化
if (this::mContent.isLateinit) {
    Log.i("CustomView", "test: ")
} 

4.@JvmField减少属性set和get方法的生成

定义一个变量:

var mData: String = "" 

反编写成java代码:

image.png

可以看到编译器会自动帮助我们生成mData的set、get方法,如果不想要编译帮助我们生成属性的set、get方法,可以添加@JvmField注解:

@JvmField
var mData: String = "" 

反编译成java代码:

image.png

这样系统就不会帮助我们生成get、set方法了,因为编译器将mData的访问修饰符改成了public

最后

也许大家在网上找到的有关kotlin的学习资料不全面,学习起来有一定难度。

在这里我可以给大家分享一份比较全面,由大神编订的《高级Kotlin强化实战》,下面免费扫码送给大家!!

高级Kotlin强化实战

第一章 Kotlin入门教程

  • Kotlin 概述
  • Kotlin 与 Java 比较
  • 巧用 Android Studio
  • 认识 Kotlin 基本类型
  • 走进 Kotlin 的数组
  • 走进 Kotlin 的集合
  • 集合问题
  • 完整代码
  • 基础语法

在这里插入图片描述

第二章 Kotlin 实战避坑指南

  • 方法入参是常量,不可修改
  • 不要 Companion 、INSTANCE ?
  • Java 重载,在 Kotlin 中怎么巧妙过渡一下?
  • Kotlin 中的判空姿势
  • Kotlin 复写 Java 父类中的方法
  • Kotlin “狠”起来,连TODO 都不放过!
  • is、as` 中的坑
  • Kotlin 中的 Property 的理解
  • also 关键字
  • takeIf 关键字
  • takeIf 关键字
  • 单例模式的写法

在这里插入图片描述

第三章 项目实战《Kotlin Jetpack 实战》

  • 从一个膜拜大神的 Demo 开始
  • Kotlin 写 Gradle 脚本是一种什么体验?
  • Kotlin 编程的三重境界
  • Kotlin 高阶函数
  • Kotlin 泛型
  • Kotlin 扩展
  • Kotlin 委托
  • 协程“不为人知”的调试技巧
  • 图解协程:suspend

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值