一、扩展函数
扩展函数是一个类的成员函数,不过定义在类的外面。
class User(var name:String)
//给User类扩展一个print函数
fun User.print(){
print("用户名 ${this.name}")
}
fun main(arg:Array<String>){
var user = User("lynnlee")
user.print()//执行结果"用户名 lynnlee"
}
上面kotlin扩展函数相当于下面java函数。
public void print(User2 user) {
System.out.print(user.getName());
}
备注:扩展函数不能访问私有或者受保护的成员
在别的包使用扩展函数可以导入函数
package com.example.kotlinapplication.other
import com.example.kotlinapplication.User
import com.example.kotlinapplication.print//导入函数
fun main() {
User("lynnlee").print()
}
package com.example.kotlinapplication.other
import com.example.kotlinapplication.User
import com.example.kotlinapplication.print as userPrint//导入函数,并且使用as来修改扩展函数名称
fun main() {
User("lynnlee").userPrint()//使用as修改后的函数名称
}
备注:可以使用关键字as来修改导入函数或者类名称
扩展函数不能被重写,因为kotlin会把他们当作静态函数对待。
open class View
class Button : View()
fun View.print() {
println("im a View")
}
fun Button.print() {
println("im a Button")
}
fun main(arg: Array<String>) {
var view = View()
var button = Button();
view.print()//执行结果"im a View"
button.print()//执行结果"im a Button"
}
二、扩展属性
扩展属性可以省略扩展对象(this),扩展函数也想扩展类的其他成员属性一样,需要生命setter和getter,var需要声明getter和setter,但是val只需要声明getter。
val String.lastChar: Char
get() {
return get(length - 1)
}