Kotlin学习笔记-6 --- 泛型

文章参考

  • 泛型,即 “参数化类型”,将类型参数化,可以用在类,接口,方法上
  • 泛型,为类型安全提供保证,消除类型强转的烦恼

1、示例

定义

class Box<T> constructor(t: T) {

    var value: T = t

    init {
        var str = when (t) {
            is Int -> "Int"
            is Float -> "Float"
            is Double -> "Double"
            is Long -> "Long"
            is String -> "String"
            is Any -> "Any"
            else -> "don't know"
        }
        Log.i("TAG_ZLZ", "------ value 的类型 : $str,  其值为 : $t")
    }
}

使用

  • 如果可以推断出类型参数,可以省略泛型参数
val any = Any()
val b1 = Box<Int>(1001)
val b2 = Box(78.987)
val b3 = Box("test")
val b4 = Box(any)

日志输出
在这里插入图片描述

2、泛型约束

定义类

class Employer constructor(name: String, position: String) : Comparable<Employer> {

    companion object {
        const val MANAGER = "manager"
        const val WORKER = "worker"
    }

    /**
     * mName     姓名
     * mPosition 职位
     */
    private val mName: String = name
    private val mPosition: String = position

    override fun compareTo(other: Employer): Int {
        val curPosition = when (mPosition) {
            MANAGER -> 2
            WORKER -> 1
            else -> 0
        }
        val otherPosition = when (other.mPosition) {
            MANAGER -> 2
            WORKER -> 1
            else -> 0
        }
        return curPosition.compareTo(otherPosition)
    }

    fun showInfo() {
        Log.i("TAG_ZLZ", "------ 姓名 : $mName,  职位 : $mPosition")
    }
}

比较方法

	fun <T> comparePosition(e1: T, e2: T): T? where T : Comparable<T> {
        return when {
            e1 > e2 -> {
                e1
            }
            e1 < e2 -> {
                e2
            }
            else -> {
                null
            }
        }
    }

使用

val e1 = Employer("Alex", Employer.MANAGER)
val e2 = Employer("Kim", Employer.WORKER)
comparePosition(e1, e2)?.showInfo()

日志输出
在这里插入图片描述

3、型变

4、星号投射

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KillerNoBlood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值