Scala入门七——scala的泛型

泛型介绍

  • 泛型类、泛型函数
  • 泛型用于指定方法或类可以接受任意类型参数
  • 参数在实际使用时才被确定
  • 泛型可以有效地增强程序的适用性
  • 使用泛型可以使得类或方法具有更强的通用性

七种形式

  1. [A<:] :上边界:表达了泛型的类型必须是"某种类型"或某种类型的"子类"
    案例:override def toSet[B >: A]: Set[B] = {}
  2. [A>:] :下边界:表达了泛型的类型必须是"某种类型"或某种类型的"父类"
    案例:override def toSet[B >: A]: Set[B] = {}
  3. [A<%] : view bounds可以进行某种神秘的转换,把你的类型在没有知觉的情况下转换成目标类型
    可以认为view bounds是上下边界的加强和补充,语法为:"<%",要用到implicit进行隐式转换
  4. “T:classTag”:相当于动态类型,你使用时传入什么类型就是什么类型
  5. 逆变和协变:-T和+T: +T可以传入其子类和本身(与继承关系一至)-T可以传入其父类和本身(与继承的关系相反)
    案例:trait scala.collection.immutable.Map[K, +V] extends Iterable[(K, V)]
  6. “T:Ordering” :表示将T变成Ordering[T],可以直接用其方法进行比大小,可完成排序等工作
  7. [A]: 一般形式:
案例:trait scala.collection.immutable.Set[A] extends Iterable[A]

代码说明:

//泛型类
class Student[A]{
  //泛型属性+泛型方法(get和set)
  var a:A = _

  def getName():A ={
    a
  }

  def m[T]():Unit={
    println("hehe")
  }
}

object GenericDemo01 {
  def main(args: Array[String]): Unit = {
    val stu = new Student[String]
    stu.a = "aaaa"
    println(stu.getName())
  }
}

猜你喜欢

转载自blog.csdn.net/guo20082200/article/details/82762605