kotlin扩展函数/属性

给已有的类去额外添加函数和属性,而且既不需要改源码也不需要写子类

扩展函数不可以被重写

扩展函数的作用域

1、全局

新建一个file文件,名字随便写就叫T吧

T文件

package com.xxx.xxx
fun Int.sumTest(num:Int):Int{
    return this+num     //this表示E文件中的a
}

E类文件

private val a:Int=5
    val sum:Int  //常量类型要与T文件中的接受类型(T文件中sumTest左边的Int)一样才可以调用方法
        get() {
            return a.sumTest(5)
        }

查看 kotlin 文件的字节码,然后再 Decompile 为 Java 代码。上面我们为 Person 扩展函数转为Java代码后大概如下。

public final class T{
   public static final void sumTest(@NotNull T $this$sumTest) {
      Intrinsics.checkParameterIsNotNull($this$sumTest, "$this$sumTest");
      
   }
}

由此可见扩展函数是通过创建外部文件+静态方法来实现
java调用

T.sumTest(new E());

2、局部
在同一个类文件中就行了

扩展属性

val Person.age: Int
    get() = currentYear - this.birthdayYear

上面我们声明的是一个 val,当然也可以声明一个 var,不过 var 的话需要同时定义其 get 和 set 方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值