美文网首页
三,Kotlin扩展方法和扩展属性

三,Kotlin扩展方法和扩展属性

作者: CarlosLynn | 来源:发表于2021-02-07 15:51 被阅读0次

扩展方法

Kotlin 能够扩展一个类的新功能而无需继承该类或者使用像装饰者这样的设计模式。 这通过叫做 扩展 的特殊声明完成。 例如,你可以为一个你不能修改的、来自第三方库中的类编写一个新的函数。 这个新增的函数就像那个原始类本来就有的函数一样,可以用普通的方法调用。 这种机制称为扩展函数 。
扩展方法是指不改变类的源码的情况下为类增加自定义的方法

语法结构:

fun ClassName.methodName(param1: Int, param2: Int): Int {
    //相关逻辑
    return 0
}

例如我们给String定义个扩展方法

/**
 * 对字符串本身进行指定次数的拼接.
 * @param times 次数
 * @return 最终拼接后的字符串.
 */
fun String.times(times: Int): String {
    val builder = StringBuilder()
    for (i in 0 until times) {
        builder.append(this)
    }
    return builder.toString()
}

调用

fun main() {
    println("test".times(2))
}

打印结果

testtest

注意:

  • 扩展函数在不修改某个类源码的情况下,动态地添加新的函数.className.
  • 扩展函数不能访问原有类的私有属性
  • 底层实际上是用写了个静态函数来实现的,将类的实例传入这个静态函数,然后搞一些操作

扩展属性

扩展属性可以给类提供一种方法,用来扩展类的 API。但是尽管它被成为属性,它也没有给现有的对象添加额外的字段。

TextView扩展leftMargin属性.

//扩展属性
var TextView.leftMargin: Int
    get():Int {
        return (layoutParams as ViewGroup.MarginLayoutParams).leftMargin
    }
    set(value) {
        (layoutParams as ViewGroup.MarginLayoutParams).leftMargin = value
    }

相关文章

  • Kotlin-面向对象-进阶

    扩展 扩展方法 Kotlin支持扩展方法和扩展属性。语法:被扩展的类/接口名.方法名() 父类不能使用子类的扩展方...

  • 三,Kotlin扩展方法和扩展属性

    扩展方法 Kotlin 能够扩展一个类的新功能而无需继承该类或者使用像装饰者这样的设计模式。 这通过叫做 扩展 的...

  • kotlin语言学习10 ——kotlin 可见性与扩展

    本节主要介绍kotlin的可见性与kotlin中的扩展功能的使用,包括:扩展类、扩展方法、扩展伴生对象、扩展属性等...

  • Kotlin 扩展

    Kotlin 扩展Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。扩...

  • Kotlin 扩展

    原本地址:Kotlin 扩展 Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorato...

  • Kotlin的扩展属性和扩展方法

    扩展方法的原理 Kotlin 中类的扩展方法并不是在原类的内部进行拓展,通过反编译为Java代码,可以发现,其原理...

  • Kotlin基础(5)-扩展属性和扩展函数

    前言 本文介绍Kotlin扩展函数与扩展属性的相关方法 扩展属性 首先看如下的一段代码: 测试结果 形式: XXX...

  • kotlin 扩展属性

    与扩展方法类似,扩展属性当然也不是真正添加进了原类。 扒开糖衣看看kotlin扩展属性实现原理。 给Date类添加...

  • 浅谈Kotlin语法篇之扩展函数(五)

    1、为什么要使用Kotlin中的扩展函数? 2、怎么去使用扩展函数和扩展属性? 3、什么是扩展函数和属性? 4、扩...

  • kotlin基础(三)

    kotlin扩展函数 Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 装饰者模式。定义形式:f...

网友评论

      本文标题:三,Kotlin扩展方法和扩展属性

      本文链接:https://www.haomeiwen.com/subject/niyotltx.html