Kotlin-对范型的理解、对比Java

泛型的意义

泛型(参数化类型)

  • 代码复用。多种类型执行相同代码
  • 类型安全,编译器检查类型。泛型的类型在使用时指定,不需要强转。

通配符

  • 超类型下界限定符? super T 指定类型参数的下限(该类型必须是类型T或者它的父类型)= in
  • 子类型上界限定符? extends T 指定类型参数的上限(该类型必须是类型T或者它的子类型) = out
  • 无界通配符 ?

在Kotlin中强调了生产消费的概念,in是消费,out是生产。

// 逆变
interface Consumer<in T> {
    fun consume(item: T)
}

// 协变
interface Production<out T> {
    fun produce(): T
}

逆变和协变

任何能用父类做为输入参数的地方,当然也能用子类作为替换,这叫逆变(Contravariant)。 in
任何返回子类的地方,当然也能安全的向上转行为父类。这叫协变(Covariant)。 out

父类泛型对象可以赋值给子类泛型对象,用 in;
子类泛型对象可以赋值给父类泛型对象,用 out。

类型擦除

  • Java中泛型在运行期是不可见的,会被擦除为它的上级类型。如果是没有限定的泛型参数类型,就会被替换为Object.

  • Java和Kotlin 的泛型实现,都是采用了运行时类型擦除的方式。也就是说,在运行时,这些类型参数的信息将会被擦除。

  • Java 和Kotlin 的泛型对于语法的约束是在编译期。

More info: CSDN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值