上界符号 <:
对应的下界符号 >:
举例说明:
定义MyPerson类,对MyPerson类进行排序
class MyPerson(val firstName : String, val lastName : String)
extends Ordered[MyPerson] {
//混入特质Ordered,并实现compare
def compare(that : MyPerson) = {
val lastNameComp = lastName.compareToIgnoreCase(that.lastName )
//先比较lastName,再比较firstName
if (lastNameComp != 0)
lastNameComp
else
firstName.compareToIgnoreCase(that.firstName )
}
override def toString = firstName + " " + lastName
}
//merge Sort
def orderedMergeSort[T <: Ordered[T]](xs : List[T]) : List[T] = {
//递归merge排序
def merge(xs : List[T], ys : List[T]) : List[T] =
(xs, ys) match {
case (Nil, _) => ys
case (_, Nil) => xs
case (x :: xsl, y :: ysl) =>
if (x < y) x :: merge(xsl, ys)
else y :: merge(xs, ysl)
}
val n = xs.length / 2
if (n == 0) xs
else {
val (ys, zs) = xs splitAt n
merge(orderedMergeSort(ys), orderedMergeSort(zs))
}
}
T <: Ordered[T]表示T需要有一个Ordered[T]的超类,例如String有一个Ordered[String]的超类,MyPerson有一个Ordered[MyPerson]的超类(因为MyPerson扩展了Ordered)。
但是请注意,Int没有Ordered[Int]的超类。
val people = List(new Person("larry", "wall"), new Person("tony", "stark"), new Person("alan", "kay"))
val sortedPeople = orderedMergeSort(people)