方法一:
使用隐式對象 implicit object 繼承 Ordering[T]類,重寫compare方法實作
// 随機定義一個方法
class XiaoHei(val name:String, val age:Int) {
// 重寫toString方法
override def toString:String = s"name:${name}, age:${age}"
}
object Scala4 {
// 定義隐式對象
implicit object Order extends Ordering[XiaoHei]{
// 重寫(自定義)compare方法
override def compare(x:XiaoHei, y:XiaoHei): Int = x.age -y.age
}
}
object OderingDemo {
// 定義比較方法
def choose(t1:XiaoHei, t2:XiaoHei): XiaoHei = {
// 引入隐式對象
import Scala4.Order
if (Ordering[XiaoHei].compare(t1, t2) > 0) t1 else t2
}
// 主方法
def main(args:Array[String]): Unit = {
val s1 = new XiaoHei("小黑",10)
val s2 = new XiaoHei("小白", age = 12)
println(choose(s1,s2))
}
}
運作結果

方法二:
定義Comparable的實作類,實作CompareTo方法;
// 定義泛型類,接受參數為Comparable的實作類
class ChooseClass[T <: Comparable[T]] {
// choose方法實作Comparable實作類的具體比較
def choose(t1:T, t2:T): T = {
if (t1.compareTo(t2) >0) t1 else t2
}
}
// 定義comparable的實作類,實作compareTo方法
class CompareClass(val name:String) extends Comparable[CompareClass] {
override def toString:String = this.name
override def compareTo(o: CompareClass): Int = this.name.compareTo(o.name)
}
// 測試類
object Test {
def main(args:Array[String]): Unit = {
val choose1 = new ChooseClass[Integer]
println(choose1.choose(100,200))
val choose2 = new ChooseClass[CompareClass]()
println(choose2.choose(new CompareClass("小黑"),new CompareClass("小白")))
}
}