1.用于指定方法或类可以接受任意类型参数
2.不可变
C[T]:无论A和B是什么关系,C[A]和C[B]没有从属关系
3.协变+
C[+T]:如果A是B的子类,那么C[A]是C[B]的子类
4.逆变-
C[-T]:如果A是B的子类,那么C[B]是C[A]的子类
5.上界
在 Java 里表示某个类型是 A 类型的子类型:<T extends A> , 或用通配符的形式:<? extends A>
在 scala 里表示某个类型是 A 类型的子类型,:[T <: A] , 或用通配符:[_ <: A]
6.下界
1)对于下界,可以传入任意类型
2)父类的还是父类处理,子类的按照本身处理
3)和本身无关的,一律按照Object处理
4)也就是下界,可以随便传,只是处理是方式不一样
5)不能使用上界的思路来类推下界的含义
7.视图限定
<% 的意思是“view bounds”(视界),它比<:适用的范围更广,除了所有的子类型,还允许隐式转换类型。同时,也支持上界使用的各种方式
8.上下文限定
上下文界定+隐式参数
implicit val personComparetor = new Ordering[Person] {
override def compare(p1: Person, p2: Person): Int =
p1.age - p2.age
}
// 会发生隐式转换,获取到隐式值 personComparetor
val comparetor = implicitly[Ordering[T]]