作为笔记记录下:
package com.lijie.scala
import MyImpilicit.person2Comp
//视图界定 需要隐式转换 这里传入的T必须隐式转换成Ordered的类型
class MyComparctorOrdered[T <% Ordered[T]] {
def comp(t1: T, t2: T): T = {
if (t1 > t2) t1 else t2
}
}
object MyComparctorOrdered {
def main(args: Array[String]): Unit = {
val c = new MyComparctorOrdered[Person]
val p1 = new Person("lijie01", 24)
val p2 = new Person("lijie02", 25)
println(c.comp(p1, p2).name)
}
}
package com.lijie.scala
import MyImpilicit._
//上下文界定
class MyComparctorOrdering[T: Ordering] {
def comp(t1: T, t2: T): T = {
val p = implicitly[Ordering[T]]
if (p.gt(t1, t2)) t1 else t2
}
}
object MyComparctorOrdering {
def main(args: Array[String]): Unit = {
val c = new MyComparctorOrdering[Person]
val p1 = new Person("lijie01", 24)
val p2 = new Person("lijie02", 25)
println(c.comp(p1, p2).name)
}
}
package com.lijie.scala
object MyImpilicit {
implicit def person2Comp(p: Person) = new Ordered[Person] {
override def compare(that: Person) = {
p.age - that.age
}
}
implicit val person2Comp = new Ordering[Person] {
override def compare(a: Person, b: Person) = {
a.age - b.age
}
}
}
package com.lijie.scala
class Person(val name: String, var age: Int)