kotlin 第八站

来源:互联网 发布:数据库镜像与备份 编辑:程序博客网 时间:2024/06/06 14:05
//kotlin 扩展//kotlin 可以对一个类的属性或者方法进行扩展,且不需要继承或者使用Decorator模式//扩展是一种静态行为,对扩展的类本身不会造成影响。//扩展函数//扩展函数可以在已有的类中添加新的方法,不会对原有的类做修改,扩展函数定义形式// fun receiverType.functionName(params){//         body// }// receiverType 表示函数的接收者,也就是函数扩展的对象// functionName 函数扩展的名称// 扩展函数的参数,可以为NULLclass User(name:String){    var name:String? = null    init {        this.name = name    }}fun User.println(){    println("用户名:$name")}fun MutableList<Int>.swap(index:Int,index2:Int){    val tem = this[index]    this[index] = this[index2]    this[index2] = tem}//扩展空对象//在扩展函数时,可以通过this来判断接收者是否为null,这样,即使接收者为null,也可以调用扩展函数fun Any?.toString():String{    if(this == null) return "NULL"    return toString()}//扩展属性 除了函数,kotlin也支持属性对属性的扩展val <T> List<T>.lastIndex:Int        get() = size-1fun main(args:Array<String>){    println("hello world")    var test = User("jack")    test.println()    val l = mutableListOf(1,2,3)    l.swap(0,2)    println(l)    var lala = null    println(lala.toString())    println(l.lastIndex)}
//kotlin数据类与密封类//kotlin可以创建一个只包含数据的类,关键字为data//编译器会自动从主构造函数中根据所有的属性提取一下函数://equals()/hashCode()toString() componenN() functions对应属性按声明顺序排列 copy()函数//如果这些函数在类中已经定义或者在超类中继承而来,就不再生成//为类保证生成代码的一致性以及意义,数据类需要满足一下条件//1.主构造函数必须有一个参数//2.所有的主构造函数的参数必须标示为var或者val//3.数据类不能声明为abstract inner open 或者sealed//4.数据类不能继承其他类(但是可以实现接口)data class User2(var name:String,var age:Int)fun main(args:Array<String>){    var jack = User2("jack",12)    var jack2 = jack.copy(age=123)    println(jack)    println(jack2)    //数据类解构声明    var(name,age) = jack    println("name is $name,age is $age")}//密封类用来表示受限的类的继承结构:当一个值为有限几种的类型,而不能有任何其他类型时。//在某种意义上,他们是枚举类的扩展:枚举类型的值集合也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类//可以有可包含状态的多个实例。//声明一个密封类,使用sealed关键字修饰类,密封类可以有子类,但所有的子类要内嵌在密封类中//sealed 不能修饰interface abstract class

原创粉丝点击