对象表达式
在设置点击事件的时候常常会用到匿名类部类,在kotlin中匿名类部类表示如下:
bt.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View?) {
println("clcik1")
}
})
bt.setOnClickListener {//lambda
println("click2")
}
bt.setOnClickListener(View.OnClickListener {//lambda
println("click3")
})
对象声明
在Kotlin中不存在静态变量,对象声明用Objcet关键字表示
object Constants{
val name = "myname"
var android = "ANDROID"
val app = "App"
}
伴生对象
一个类可以设置对象声明,在类的内部可以使用对象声明,使用companion关键字声明,这样的对象称为伴生对象。
class MyClass{
companion object {
fun create():MyClass = MyClass()
}
}
扩展函数
要声明一个扩展函数,我们需要在函数的名称前加上一个接收者类型并且加上.符号
fun MutableList<Int>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // this对应list
this[index1] = this[index2]
this[index2] = tmp
}
val l = mutableListOf(1, 2, 3)
l.swap(0, 2) // 在 `swap()` 函数中 `this` 持有的值是 `l`
println(l)
This表达式
在类的成员中,this表示当前类的对象,在扩展函数或带接收者的文本函数中,this在.的左边,表示接收者参数
class C {
//默认带有@C标签
//this表示C
val c = this
inner class D {
fun Int.m(){//默认带有@m标签
//表示C
val a = this@C
//表示D
val b = this
//表示D
val c = this@D
//
val d = this@m
}
}
}
修饰符
Kotlin有四种可见性修饰符,分别是public,private,protected,internal,默认的修饰符是public,除了internal之外,其他三种修饰符与Java的访问权限一样,private修饰的属性是不会自动生成get和set方法的
open class D{
private val a = 1
protected open val b = 2
internal val c = 3
val d = 4//默认为public final
}
class E :D(){
override val b =5//只有b能被重写
}
数据类
Kotlin的惯用语法是有写POJO类,一般写那种类都是用data修饰的类,也就是数据类表示,只保存数据的类。
data class User(val name: String, val age: Int)
val user = User("zhan", 1)
val copy = user.copy(age =3)
网友评论