scala类型变量界定

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")))
  }
}

猜你喜欢

转载自172356193.iteye.com/blog/2269567
今日推荐