kotlin——03.扩展,泛型

本文介绍了Kotlin中的扩展功能,这是一种静态行为,可以为类添加属性和方法而不影响原有类。文中列举了标准库中的apply、with、run、let、also和takeIf等扩展函数的使用,并给出了Android开发中的应用示例。此外,还探讨了泛型约束,通过`: `符号设定泛型类型的上限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

扩展

Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。
扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。

  • 扩展函数的声明非常简单,它的关键字是 < Type >,此外我们需要一个接收者类型,通常是类或接口的名称来作为它的前缀
  • 如下扩展Person类
fun main(args: Array<String>) {
    var person = Person("张三")
    person.print()
}

class Person ( var name:String)

fun Person.print(){
    println("用户名 $name")
}

标准库中的扩展函数:apply,with,run,let,also,takeIf

  • apply:返回的是原来的对象
fun main(args: Array<String>) {
    val stu = Student("张三",15)
    stu.apply { 
        val name = name
        val age = age
    }
}

data class Student(var name:String,var age:Int)

  • with

在Android开发中,我们经常会给一些视图绑定属性。利用with可以让代码的可读性更好

fun main(args: Array<String>) {
    val stu = Student("张三",15)
    with(stu){
        txtName.text = name
        txtAge.txt = age
    }
}

data class Student(var name:String,var age:Int)

  • run

这个范围函数本身不是很有用,但是相比范围,还有一点挺不错的是它返回范围内最后一个对象。

fun main(args: Array<String>) {
    testFun()
}

fun testFun(){
    val nickname = "张三"
    run {
        val nickname = "李四"
        println(nickname)
    }
    println(nickname)
}

输出:

李四
张三

应用场景:用户点击新人奖励的按钮,如果该用户此时没有登录则弹出loginDialog,如果用户已经登录则弹出领取奖励的getAccountDialog。我们可以使用一下代码来处理这个逻辑

 run { 
        if (!isLogin) loginDialog else getAccountDialog
    }.show()

  • let:返回的是闭包里面的值
fun main(args: Array<String>) {
    val stu = Student("张三",15)
    stu.let {
        val name = it.name
        val age = it.age
    }
}

data class Student(var name:String,var age:Int)

  • also:它像是let和apply函数的加强版,与apply一致,它的返回值是该函数的接收者

  • takeIf:如果我们不仅仅只想判空,还想加入条件,这时let可能显得有点不足

fun main(args: Array<String>) {
    val stu = Student("张三", 15)
    stu.takeIf { it.age > 15 }.let {
        it?.name
    }
}

data class Student(var name: String, var age: Int)

泛型

fun main(args: Array<String>) {
    
    val box :Box<Int> = Box<Int>(10)
    //或者
    val b = Box(10)
}

//声明一个泛型类
class Box<T> (t:T) {
    var value = t
}

泛型约束

我们可以使用泛型约束来设定一个给定参数允许使用的类型。
Kotlin 中使用 : 对泛型的类型上限进行约束。

fun main(args: Array<String>) {

    sort(listOf("1","2","3"))
    sort(listOf(HashMap<Int, String>())) // 错误:HashMap<Int, String> 不是 Comparable<HashMap<Int, String>> 的子类型
}

fun <T : Comparable<T>> sort (list:List<T>) {
	...
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值