泛型的概念
泛型的定义为:参数化类型,即所有操作的数据类型被指定为一个参数。
在Scala中,用[]表示(在java中使用<>)。
泛型是对数据的类型的约束
泛型方法
泛型方法指的是:把泛型定义放在方法声明上。即:该方法的参数类型是由泛型来决定的。在调用方法时,明确具体的数据类型。
泛型方法的格式
定义方法: def 方法名泛型名称1,泛型名称2,. . . = { }
调用方法: 方法名类型1,类型2,
如果在参数列表中可以推断出对应的类型,则可以省略方括号[类型1,类型2]
泛型类
泛型类指的是:把泛型定义放在类的声明上。即:该类中的参数类型是由泛型来决定的。在创建对象的时候,再来明确具体的数据类型。
格式:class 类[T](val 变量:T)
object fx1 {
def getMiddle[T](arr:Array[T]):T = {
// 长度/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[Double](Array(1.1,2.2, 3.3))
println(s"数组的中间元素是:${m2}") // 2.2
}
}
理解泛型
ArrayList 是数据类型,Student是泛型。 他们不是一个层次的概念。 类型内部的数据使用泛型来约束。
object fx2 {
/*
* 定义集合 (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 fx3 {
// 泛型类
// 类内部的数据类型不确定,所以用泛型
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)
}
}