Kotlin 嵌套函数开发技巧详解

 更新时间:2022年09月01日 17:04:32   作者:长安皈故里  
这篇文章主要为大家介绍了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代码看下:

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

PS:当@JvmOverloads使用在基于已有的WebView、EditText等组件自定义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代码:

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

@JvmField
var mData: String = ""

反编译成java代码:

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

以上就是Kotlin 嵌套函数开发技巧详解的详细内容,更多关于Kotlin 嵌套函数的资料请关注脚本之家其它相关文章!

相关文章

  • 关于android连续点击出现多个Activity界面的解决方法

    关于android连续点击出现多个Activity界面的解决方法

    这篇文章主要介绍了关于android连续点击出现多个Activity界面的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android自定义view实现输入控件

    Android自定义view实现输入控件

    这篇文章主要为大家详细介绍了Android自定义view实现输入控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android 使用SharePerference判断是否为第一次登陆的实现代码

    Android 使用SharePerference判断是否为第一次登陆的实现代码

    很多app中在第一次安装登陆时会有引导欢迎界面,第二次打开时就不再显示引导页面。这个怎么实现呢?下面小编给大家介绍下使用SharePerference判断是否为第一次登陆的实现代码,需要的的朋友参考下吧
    2017-03-03
  • android实现可拖动的浮动view

    android实现可拖动的浮动view

    这篇文章主要为大家详细介绍了android实现可拖动的浮动view,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Android获取联系人头像的方法

    Android获取联系人头像的方法

    这篇文章主要介绍了Android获取联系人头像的方法,结合实例形式分析了Android调用联系人头像的相关操作技巧,涉及Bitmap对象及ImageView的使用方法,需要的朋友可以参考下
    2016-08-08
  • Android实现邮箱验证功能

    Android实现邮箱验证功能

    这篇文章主要为大家详细介绍了Android实现邮箱验证功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Flutter之Timer实现短信验证码获取60s倒计时功能的代码

    Flutter之Timer实现短信验证码获取60s倒计时功能的代码

    这篇文章主要介绍了Flutter之Timer实现短信验证码获取60s倒计时功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Android开发中的Surface库及用其制作播放器UI的例子

    Android开发中的Surface库及用其制作播放器UI的例子

    这篇文章主要介绍了Android开发中的Surface库及用其制作播放器界面的例子,利用SurfaceView和SurfaceHolder可以高效地绘制和控制图形界面,需要的朋友可以参考下
    2016-04-04
  • Android studio实现app登录界面

    Android studio实现app登录界面

    这篇文章主要为大家详细介绍了Android studio实现app登录界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Android中创建子线程的方式详解

    Android中创建子线程的方式详解

    这篇文章主要介绍了几种Android中创建子线程的方法,文中有详细的代码示例供参考,对学习或工作有一定的帮助,需要的小伙伴可以参考一下
    2023-05-05

最新评论