/**
* 使用视图界定 自定义隐式转换 比较两个person的年龄的大小
*/
object ViewBoundsDemo {
def main(args: Array[String]): Unit = {
val james = new Person2("james", 30)
val kebe = new Person2("kebe", 35)
import MyImplicite._ //引入隐式转换
val compareComm = new CompareComm(james, kebe)
println(compareComm.greater)
}
}
/**
* 一个普通的person类
*
* @param name
* @param age
*/
class Person(val name: String, val age: Int) {
override def toString: String = this.name + "\t" + this.age
}
/**
* 说明
* 1、T <% Ordered[T] 视图界定
* 2、T 是 Ordered[T] 的子类
* 3、如果我们传入obj1 pbj2 就触发隐士转换机制
* 4、如果作用域提供隐士转换机制就ok 否则就报错
* 5、Ordered 实现了compareable 接口
*
*/
class CompareComm[T <% Ordered[T]](obj1: T, obj2: T) {
def greater = if (obj1.compareTo(obj2) > 0) obj1 else obj2
}
//自定义隐式转换
object MyImplicit {
/**
* 隐士将person -> Ordered[Person] 放在 object MyImplicit中
*/
implicit def personToOrdered(person:Person) ={
new Ordered[Person2]{
override def compare(that: Person): Int = person.age - that.age
}
}
}