scala类型变量界定的两种操作方式:[T <: M] 、 [T >: M]。
表达式解释:
1、[T <: M] 给T设置上界。即T应该是继承自M。
2、[T >: M] 给T设置下界。即M应该是继承自T。
应用场景:
1、[T <: M] 当程序中用到了T,用到了M的某些方法。这时,如果T没有继承来自M,就会编译出错。
2、[T >: M] 当方法中的参数,出现了一个T,一个M 时,方法需要返回一个T类型时。如果此时,用这个表达式,他将会返回Any类型。
例子:
class Person(name : String) extends Comparable[Person]{ override def compareTo(o: Person): Int = 1 } class Student(age : Int) extends Person(name = "xxx"){ override def compareTo(o: Person): Int = -1 } class Pair[T <: Comparable[T]](val first : T,val second : T) { def smaller = if(first.compareTo(second)< 0 ) first else second def replaceFile(newFirst : T) = new Pair[T](newFirst,second) def replaceFileByR[Person >: T](newFirst : T) = new Pair[T](newFirst,second) } class Pairs[T](val first : T,val second : T) { def replaceFileByR[R >: T](newFirst : R) = new Pairs[R](newFirst,second) } object Pair{ def main(args: Array[String]) { val pair = new Pair[Person](new Person("spark"),new Student(1)) println(pair.smaller) val pairs = new Pairs[Student](new Student(3),new Student(1)) println(pairs.replaceFileByR(new Person("Replace Spark"))) } }