27.泛型和泛型约束



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

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

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

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

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

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

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

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

你可能感兴趣的:(27.泛型和泛型约束)