美文网首页
Kotlin与Java比较:泛型

Kotlin与Java比较:泛型

作者: 程序引力 | 来源:发表于2018-12-03 23:45 被阅读1次

前言

Kotlin作为JVM系的语言,起源于Java又不同于Java。通过在语言层面比较两者的区别,可以使得开发者能够快速学习,融会贯通。

泛型概念

泛型,即参数化类型。何为参数化类型?在学习泛型前,开发者都对如下形式的声明了如指掌:

// java
int x;

这表示,x这一变量的类型是int,但是其值是变化的。也就是说,这一变量,它的类型是固定的,但是值是不定的。

那读者可能会问,那类型可以是不定的吗?答案是可以。这就是泛型。泛型就是对于一个变量,它的类型(或者说处理的类型)是不定的,这就是泛型。

泛型简单示例

  • Java
public class Box<T>(T t) {
    T value = t
}
  • Kotlin
// 声明泛型
class Box<T>(t: T) {
    var value = t
}
// 使用泛型
val box: Box<Int> = Box<Int>(1)

型变

  • Java
    在Java中,支持通配符类型参数,其示例为:
List<? extends T>
List<? super T>

前者表示接受T或者T的子类的对象,后者表示接受T或者T的父类的对象。即extends限定了上界,此种通配符类型被称为协变的。而super限定了下界,这种通配符类型被称为逆变的。

  • Kotlin
    在Kotlin中使用out与in关键字来达到类似的效果。
interface Source<out T> {
    fun nextT(): T
}

fun demo(strs: Source<String>) {
    val objects: Source<Any> = strs // 这个没问题,因为 T 是一个 out-参数
    // ……
}
interface Comparable<in T> {
    operator fun compareTo(other: T): Int
}

fun demo(x: Comparable<Number>) {
    x.compareTo(1.0) // 1.0 拥有类型 Double,它是 Number 的子类型
    // 因此,我们可以将 x 赋给类型为 Comparable <Double> 的变量
    val y: Comparable<Double> = x // OK!
}

相关文章

  • 泛型

    与Java泛型相同,Kotlin同样提供了泛型支持。对于简单的泛型类、泛型函数的定义,Kotlin 与 Java ...

  • Kotlin 泛型

    说起 kotlin 的泛型,就离不开 java 的泛型,首先来看下 java 的泛型,当然比较熟悉 java 泛型...

  • Kotlin与Java比较:泛型

    前言 Kotlin作为JVM系的语言,起源于Java又不同于Java。通过在语言层面比较两者的区别,可以使得开发者...

  • Kotlin 泛型 VS Java 泛型

    建议先阅读我的上一篇文章 -- Java 泛型 和 Java 泛型一样,Kotlin 泛型也是 Kotlin 语言...

  • Kotlin泛型与DSL重点记录

    泛型 kotlin的泛型语法与java类似,比如声明一个泛型类: 类型参数约束 类似于java中的entends关...

  • 【Android】 Kotlin(七)泛型

    深入理解Kotlin泛型 Kotlin 的泛型与 Java 一样,都是一种语法糖,即只在源代码中有泛型定义,到了c...

  • Kotlin 泛型

    Kotlin 支持泛型, 语法和 Java 类似。例如,泛型类: 泛型函数: 类型变异 Java 的泛型中,最难理...

  • Kotlin---泛型

    Kotlin不变型泛型 Kotlin的不变型泛型和Java一样,通过声明泛型类型来使用泛型类。而该种泛型声明后,则...

  • 泛型、型变与投影

    简单泛型 kotlin 对于简单泛型的支持与java类似, 可以通过通配符,提升代码的灵活度 限定型泛型 在编码实...

  • Kotlin(四)泛型

    4.1 泛型:类型安全 对比java的历史,java1.5 开始引入的 泛型。同样,Kotlin泛型也是很重要的 ...

网友评论

      本文标题:Kotlin与Java比较:泛型

      本文链接:https://www.haomeiwen.com/subject/hlrpcqtx.html