Scala的泛型

43 阅读2分钟

内容:

1. Scala 的泛型定义;

2. 泛型方法;

3. 泛型类;

4. 泛型特质。

需求定义一个名为getKiddle的方法,用它来获取输入列表的中间位置上的元素。以整型数据为例,我们可以写代码如下

def main(args: Array[String]): Unit = {  
  val arr1 = Array(1,2,3,4,5)  
  def getMiddleEle(arr:Array[Int]): Int = {  
    arr(arr.length/2)  
  }  
  val i:Int = getKiddle(arr1)  
  println(i)  
}

新的需求:如果来了一个新的列表,它保存的是字符串类型的列表,大家应该如如何去实现这个功能呢?

可以定义这个同名的方法?

def getKiddle(arr:Array[Int]): Int = {

    arr(arr.length/2)

}

def getMiddleEle(arr:Array[String]): String = {

    arr(arr.length/2)

}

答案是:不行。错误的原因是:函数同名了

那可以改下函数,把函数换个名字吗? 当然可以的,但是,这样就太浪费了。

此时我们遇到的困难是: 类型是变化的! 这里就可以使用泛型改进:使用泛型来定义。

泛型的概念

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

在Scala中,用[]表示(在java中使用<>)。

屏幕截图 2025-12-30 113614.png

泛型是对数据的类型的约束!

我们的学习内容包括:泛型方法,泛型类,泛型特质。

泛型方法

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

泛型方法的格式

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

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

如果在参数列表中可以推断出对应的类型,则可以省略方括号[类型1,类型2]

使用泛型方法来解决本课开头提出的问题。

引导分析:大家看看的代码,确实可以使用多个函数来解决类型不同的问题,但是,我们分析一下,是不是就是参数类型不同?

参数类型不同,我们是否可以封装一个针对类型的参数?