scala的泛型

72 阅读1分钟

问题导入

两个函数长得一样,只有参数类型不同

把类型当做参数,在调用时传入

需求定义一个名为getMiddleElement的方法,用它来获取输入列表的中间位置上的元素。

1 2 3 4 5 6 7

object fx01 {
  def getMiddle[T](arr: Array[T]): T = {
    arr(arr.length / 2)
  }

  // def getMiddle(arr:Array[String]):String = {
  //   arr(arr.length/2)
  // }

  def main(args: Array[String]): Unit = {
    val arr1 = Array(1,2,3,4,5,6,7)
    println(s"arr1的中间元素是: ${getMiddle[Int](arr1)}")

    val arr2 = Array("a","b","c")
    println(s"arr2的中间元素是: ${getMiddle[String](arr2)}")

    val arr3 = Array(1.1,2.2,3.3)
    println(s"arr3的中间元素是: ${getMiddle[Double](arr3)}")
  }
}

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

泛型的概念

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

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

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

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

泛型方法

泛型方法指的是:把泛型定义放在方法声明上。

即:该方法的参数类型是由泛型来决定的。

在调用方法时,明确具体的数据类型

泛型方法的格式

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

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

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

// 泛型类
object fx02 {
  class Rectangle[X](var w: X, var h: X) {
    def getArea(): Unit = {
      println(w, h)
    }
  }

  def main(args: Array[String]): Unit = {
    val r1 = new Rectangle[Double](1.5, 2)
    r1.getArea()
  }
}