【2023】Kotlin教程 第二篇 面向对象与函数式编程 第14章 泛型 14.1 泛型函数 14.1.1 声明泛型函数

【2023】Kotlin教程

在这里插入图片描述

第二篇 面向对象与函数式编程

第14章 泛型

使用泛型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型特性对Kotlin影响最大是在集合中使用泛型。

14.1 泛型函数

泛型可以应用于函数声明、属性声明、泛型类和泛型接口。

14.1.1 声明泛型函数

首先考虑一个问题,怎样声明一个函数来判断两个参数是否相等呢?如果参数是Int类型,则函数声明如下:

private fun isEqualsInt(a: Int, b: Int): Boolean {
    
    
    return (a == b)
}

这个函数参数列表是两个Int类型,它只能比较两个Int类型参数是否相等。如果想比较两个Double类型是否相等,可以修改上面声明的函数如下:

private fun isEqualsInt(a: Double, b: Double): Boolean {
    
    
    return (a == b)
}

这个函数参数列表是两个Double类型,它只能比较两个Double类型参数是否相等。如果想比较两个String类型是否相等,可以修改上面声明的函数如下:

private fun isEqualsInt(a: String, b: String): Boolean {
    
    
    return (a == b)
}

以上分别对3种类型的两个参数进行了比较,声明了类似的3个函数。那么是否可以声明一个函数使之能够比较3种类型呢?合并后的代码:

private fun <T> isEqualsInt(a: T, b: T): Boolean {
    
    
    return (a == b)
}

在函数名isEquals前面添加<T>这就是泛型函数了,<T>是声明类型参数,T是类型参数,函数中参数类型也被声明为T,在调用函数时T会用实际的类型替代

【提示】泛型中类型参数,可以是任何大写或小写的英文字母,一般情况下人们习惯于使用字母T、E、K和U等大写英文字母。

调用泛型函数代码:

private fun <T> isEqualsInt(a: T, b: T): Boolean {
    
    
    return (a == b)
}

fun main() {
    
    

    println(isEqualsInt(1, 5))
    println(isEqualsInt(1.0, 2.0))
    println(isEqualsInt("abc", "abc"))

}

在这里插入图片描述

调用时自动将T完成替换。

猜你喜欢

转载自blog.csdn.net/weixin_44226181/article/details/130038034
今日推荐