kotlin 第八站

//kotlin 扩展
//kotlin 可以对一个类的属性或者方法进行扩展,且不需要继承或者使用Decorator模式
//扩展是一种静态行为,对扩展的类本身不会造成影响。
//扩展函数
//扩展函数可以在已有的类中添加新的方法,不会对原有的类做修改,扩展函数定义形式
// fun receiverType.functionName(params){
//         body
// }
// receiverType 表示函数的接收者,也就是函数扩展的对象
// functionName 函数扩展的名称
// 扩展函数的参数,可以为NULL
class 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-1
fun 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值