类型约束,提供了限定类型的另一种方式,一共有3中关系声明:
T =:= U意思为:T类型是否等于U类型 返回true或false
T <:< U意思为:T类型是否为U或U的子类型 返回true或false
T <%<U意思为:T类型是否被隐式(视图)转换为U (判断)返回true或false
T <% U意思为:T类型 转换为U类型(操作)
如果想使用上面的约束,需要添加“隐式类型证明参数”比如
class Pair5[T] (val first: T, val second: T)(implicit ev: T <:< Comparable[T]){}
使用举例
import java.io.File
class Pair6[T](val first: T, val second: T) {
def smaller(implicit ev: T <:< Ordered[T]) = {
if(first < second) first else second
}
}
object Main6 extends App{
override def main(args: Array[String]): Unit = {
//构造Pair6[File]时,注意此时是不会报错的
val p6 = new Pair6[File](new File(""), new File(""))
//这就报错了
p6.smaller
}
}