27.泛型和泛型约束



/**
 * 描述:让一个类型能被"广泛"使用,即通用化,称之为"泛型"。
 * 一般用于函数的参数类型定义,让函数更通用。
 * 作者:jet
 * 创建时间: 2017-11-22 10:34
 * 修改人:
 * 修改时间:
 * 修改内容:
 */

fun main(args: Array<String>) {
    //最常见的例子,print和println函数,几乎可以放任意类型的参数
    println(2)
    println("泛型")
    println(arrayOf("Swift","Kotlin","iOS","Android").joinToString())

    //arrayOf 创建数组,参数也可以是任意类型
    val a = arrayOf(1,2,3)

    //定义一个泛型函数:<T>,T代表一个占位符,用尖括号包含
    fun<T> showText(para: T){
        println(para)
    }
    showText(3)
    showText("Kotlin 快速入门!")

    //有时候系统提供的泛型函数很好
    //比如求和
//    val sum = arrayOf(1,3,2).sumBy { it }
//    println("sum = $sum")

    //泛型约束:<泛型占位符:类型>
    //比如仅限数字类型
    fun <T:Number>sum(vararg  number:T):Double{
        return  number.sumByDouble { it.toDouble() }
    }

    println(sum(1.0,2,4,-100,0.4))

    //多重约束:where 语句,各个约束用逗号分隔。写在函数体之前。
    //例:把数组中大于某个元素(阈值)的部分取出并升序排列。
    //满足条件:数字型(有大小),可比较型(能排序)
//    fun <T> biggerPart(list:Array<T>,threshild:T):List<T> {
//        return list.filter { it >= threshild }.sor
//    }
    fun <T> biggerPart(list: Array<T>, threshold: T): List<T>
            where T : Number, T : Comparable<T>
    {
        return list.filter { it >= threshold }.sorted()
    }

    val aList = arrayOf(1,0,55,99,3,2,666)
    println(biggerPart(aList,2).joinToString())
}



出自:http://www.xiaoboswift.com/course/54

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容