Scala的泛型

85 阅读2分钟

泛型的概念

泛型的定义为:参数化类型,即所有操作的数据类型被指定为一个参数

泛型方法

泛型方法指的是:把泛型定义放在方法声明上。即:该方法的参数类型是由泛型来决定的。在调用方法时,明确具体的数据类型。

泛型方法的格式

定义方法: def 方法名泛型名称1,泛型名称2,. . . = {  }

调用方法: 方法名类型1,类型2,

/*
*
* getMiddle(Array(1,2,3,4,5))  ===> 3
*
*
* getMiddle(Array("1","2","3","4","5")) ===>3
*
*
* */
object fx01 {
  def getMiddle_Int(arr:Array[Int]): Int = {
    // 长度/2
    arr(arr.length / 2)
  }

  def getMiddle_String(arr:Array[String]):String = {
    // 长度/2
    arr(arr.length / 2)
  }
  
  def getMiddle_Double(arr:Array[Double]):Double = {
    // 长度/2
    arr(arr.length / 2)
  }

  def main(args: Array[String]): Unit = {
    var m = getMiddle_Int(Array(1,2,3,4,5))

    println(s"数组的中间元素是:${m}")

    var m1 = getMiddle_String(Array("aa","bb","cc"))

    println(s"数据的中间元素:${m1}")

    var m2 = getMiddle_String(Array(1.1,2.2, 3.3))

    println(s"数据的中间元素是:${m2}")//2.2
  }
}

理解泛型

ArrayList 是数据类型,Student是泛型。 他们不是一个层次的概念。 类型内部的数据使用泛型来约束。

object fx02 {
/*
* 定义集合 (set, list, map, array) 时,通过泛型来传递可以装入的数据类型
* */

  def main(args: Array[String]): Unit = {
    var li = scala.collection.mutable.ListBuffer[Int]()

    li += 1
    li += 2

    li.foreach(println)

  }
}

泛型类

泛型类指的是:把泛型定义放在类的声明上。即:该类中的参数类型是由泛型来决定的。在创建对象的时候,再来明确具体的数据类型。

格式:class 类[T](val 变量:T)

来从一个具体的需求出发来看看泛型类的使用。

需求:定义一个Pair泛型类,该类包含两个字段,且两个字段的类型不固定。创建不同类型的Pair泛型类对象,并打印

object fx03 {

  // 泛型类
  // 类内部的数据类型不确定,所以用泛型
  class Pair[T](var a:T, var b:T)

  def main(args: Array[String]): Unit = {
    val p1 = new Pair[Int](1,2)
    println(p1.a)
    println(p1.b)

    val p2 = new Pair(1.1,2.2) // 省略类型double,它可以自己推测出来
    println(p1.a)
    println(p1.b)

  }
}