啥都不说,先上代码
class CompareComm1[T: Ordering](obj1: T, obj2: T)(implicit comparetor: Ordering[T]) {
// 看到def 那就是一个方法,这个方法没有入参,返回了一个 T 类型的对象
def geatter = if (comparetor.compare(obj1, obj2) > 0) obj1 else obj2
}
//一个普通的Person类
class Person(val name: String, val age: Int) {
override def toString = this.name + "\t" + this.age
}
object ContextBounds {
//定义了一个隐式值 类型是:Ordering[Person]
implicit val personComparetor = new Ordering[Person] {
override def compare(p1: Person, p2: Person): Int =
p1.age - p2.age
}
def main(args: Array[String]): Unit = {
val p1 = new Person("mary", 30)
val p2 = new Person("smith", 35)
val compareComm1 = new CompareComm1(p1, p2)
println(compareComm1.geatter)
}
}
格式是 [A:B]
A是一个泛型,B是一个具体的类或者接口
也就是说这个A 有B的特性,如果B是一个接口,那么A 也就有这个接口的特性?表示A has B?
上面这句话是错的,A并没有B的特性,也不是B的子类
可以看到上面的示例中,这里的泛型A 表示 Person,B表示 Ordering
但是person 并没有实现B接口
那到底B表示啥?作用是什么?
B是用来对A做操作的,调用B实例的方法去操作A的实例
于是就有 B[A] 这样的类型,表示具体的类型B 他的泛型是A
这么做的目的是为了,调用B实例的方法去操作A的实例