直接看代码:
package common.typepara
import scala.math.Ordered
import scala.collection.immutable.List
class Animal
class Human extends Animal
class Toy
/*
* 类型参数化,<:的意思是T为Animal的子类
* */
class Duck[T <: Animal] {
def pt = println("hello")
}
object TypePara {
/*
* <:和<%的区别,<%可以是可隐式转换到List[T]的类型
* T可以是Ordered[T]的子类,使用<%也可以是能够转化为Ordered[T]的类型
* 下面是个排序算法,使用模式匹配和list的语法
* */
def quick[T <% Ordered[T]](list: List[T]): List[T] = {
list match {
case Nil => Nil
case x::xs =>
val (l,r) = xs partition (_ < x)
quick(l) ++ (x::quick(r))
}
}
def main(args: Array[String]) = {
val d1 = new Duck[Animal]
val d2 = new Duck[Human]
/*
* 下面这行语句会编译错误,因为Toy并不是Animal的子类
* */
//val d3 = new Duck[Toy] //compile error
/*
* 因为int和string都不是Ordered的子类,但是通过<%可以隐式转化到Ordered的类型
* */
val list = List(1,2,3,4)
quick(list).foreach(println)
val list2 = List("ad","fd")
quick(list2).foreach(println)
}
}