Kotlin初识Kotlin之扩展函数与属性

Posted woodwhale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin初识Kotlin之扩展函数与属性相关的知识,希望对你有一定的参考价值。

【Kotlin】初识Kotlin之扩展函数与属性

1、扩展函数

在Kotlin中,对于已经定义好的class,我们可以使用扩展函数的方式,给这个类动态扩展一个函数方法,使用方法也很简单,看下面例子就懂了:

fun main() 
    fun String.getLastChar() = this[this.length-1]
    println("woodwhale".getLastChar())

上面的例子中,我们在main函数中写了一个tring.getLastChar()函数,这是对String类拓展了一个getLastChar()函数,作用就是获取最后一位的Char

在上述拓展函数中,this指的是当前这个对象,也就是自己这个字符串。在写拓展函数的时候我们可以具体分析情况来使用this

上述代码也可以这么写:

fun main() 
    println("woodwhale".getLastChar())


fun String.getLastChar(): Char 
    val index = this.length - 1
    return this[index]

从中我们可以看到,扩展函数可以在任何地方定义

如果是内部类、嵌套类中的方法,或者伴生类中的方法,也可以使用同样的方式来拓展

fun main() 
    fun Test.Companion.sout() = println("伴生类拓展函数")
    Test.sout()

    fun Test.InnerTest.sout() = println("内部类拓展函数")
    Test().InnerTest().sout()
    
    fun Test.TestB.sout() = println("嵌套类拓展函数")
    Test.TestB().sout()


class Test 
    class TestB 
        
    
    inner class InnerTest 

    
    companion object 

    


/*
    伴生类拓展函数
    内部类拓展函数
    嵌套类拓展函数

    进程已结束,退出代码0
*/

需要注意的是,如果扩展的函数名已经存在了原来的类中,那么或默认调用类中的成员方法

fun main(args: Array<String>) 
    val extension = ExtensionTest()
    // 此处调用的会是成员方法
    extension.test()


class ExtensionTest 
    fun test() = print("成员方法")

// 该方法不会被调用
fun ExtensionTest.test() = println("扩展方法")

2、扩展属性

在了解了扩展函数之后,我们也就不难理解扩展属性了

同样的方式来定义一个扩展的属性

但是在使用之前,我们需要知道扩展属性的几个限制:

  • 扩展属性不能有初始值
  • 扩展属性不能用filed关键字访问幕后字段
  • val必须提供get方法,var必须提供get和set方法。
class Test 
    val name = "woodwhale"
    class TestB 

    
    inner class InnerTest 

    
    companion object 

    


val Test.property: String get() = this.name.uppercase()
val Test.TestB.property : String get() = Test().name.uppercase()
val Test.InnerTest.property: String get() = Test().name.uppercase()
val Test.Companion.property: String get() = Test().name.uppercase()

fun main() 
    println(Test().property)
    println(Test.property)
    println(Test.TestB().property)
    println(Test().InnerTest().property)

3、Kotlin中常用的扩展

在Kotlin源码中定义了大量的扩展,例如:letrunapplywith,了解这些扩展函数的作用可以大大提高我们的代码效率!

我在网上发现了一篇写的非常详细的Kotlin常用扩展函数的博文,直接指路!

Kotlin专题「一」:你了解Kotlin的let,with,run,apply,also作用域函数的区别吗?

以上是关于Kotlin初识Kotlin之扩展函数与属性的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 扩展函数之扩展属性

初识Kotlin之函数

初识Kotlin之集合

2.7 学习总结 之Androidjava To Kotlin 一(初识)

Kotlin基础-扩展

Kotlin初识Kotlin之面向对象