Kotlin笔记4-可见性修饰符和扩展函数

参考自官网介绍:http://kotlinlang.org/docs/reference/extensions.html

 

1. Visibility Modifiers 可见性修饰符

可见性修饰符有四种:privateprotectedinternal and public,默认是public

可以用于修饰类、伴生对象object、接口、构造函数、一般函数、属性和其setter方法,getter方法和其属性可见性一致。

internal修饰的,是module内可见,对应于Android Studio中的一个module。

protected不能同于顶级声明,即直接在一个package中声明,其声明的可对于子类可见。

⚠️注意:局部变量,局部方法,局部类(?什么叫Local classes)不能有Visibility Modifiers

 

2. 扩展函数

类似于C#,扩展函数可以在不继承一个类,以及不使用任何设计模式(如装饰者模式)的的前提下,扩展一个类的功能。在函数名前加一个接受者类型,和一个点 ,例如为MutableList类扩展一个swap方法

fun MutableList<Int>.swap(index1: Int, index2: Int) {
    val tmp = this[index1] // 'this' corresponds to the list
    this[index1] = this[index2]
    this[index2] = tmp
}

其中,this表示接收者的类型,现在可以如下调用

val l = mutableListOf(1, 2, 3)
l.swap(0, 2) // 'this' inside 'swap()' will hold the value of 'l'

通过使用范型,可以在改变后,用于所有类型,如下:

fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
    val tmp = this[index1] // 'this' corresponds to the list
    this[index1] = this[index2]
    this[index2] = tmp
}

通过在函数名称前添加范型类型T,可以在接受者类型中使用该范型T

当类已经有一个和扩展函数同名的函数时,在调用该函数时,会调用成员函数的方法,参数列表不一致时除外。

 

3. 扩展属性

和扩展函数一样,Kotlin支持扩展属性,以简化代码的编写。

val <T> List<T>.lastIndex: Int
    get() = size - 1

⚠️注意:只能通过提供getters/setters的方式来定义扩展属性。

val Foo.bar = 1 // error: initializers are not allowed for extension properties

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值