📜  Scala 中的泛型类

📅  最后修改于: 2022-05-13 01:54:55.059000             🧑  作者: Mango

Scala 中的泛型类

在 Scala 中,形成泛型类与在Java中形成泛型极为相似。像参数一样接受类型的类在 Scala 中被称为泛型类。此类采用方括号内的参数类型,即 [ ]。这些类被显式地用于 Scala 中集合类的进展。泛型类型的子类型是不变的,即,如果我们有两个列表类型,A 和 B,那么 List[A] 是 List[B] 的子类型当且仅当类型 B 等价于类型 A。
需要记住的几点:

  • 用于简单类型的类型参数的符号是 A ,如 List[A]。
  • 用于第二、第三、第四等类型参数的符号,泛型类中的类型分别为B、C、D等。
  • 在 Scala Map 中,键的符号是A ,值的符号是B。
  • 用于数值的符号是N

注意:尽管提供了此符号约定,但仍然可以将任何符号用于类型参数。
让我们在下面讨论一些例子。
例子:

// Scala program of forming 
// Generic classes
  
// Creating an object
object GfG
{
  
    // Main method
    def main(args: Array[String]) 
    {
  
        // Class structure for Generic
        // types 
        abstract class Divide[z] 
        {
            // Defining method 
            def divide(u: z, v: z): z
        }
  
        // Extending Generic class of 
        // type parameter Int 
        class intDivide extends Divide[Int] 
        {
            // A method returning Int 
            def divide(u: Int, v: Int): Int = u / v
        }
  
        // Extending Generic Class of 
        // type parameter Double
        class doubleDivide extends Divide[Double] 
        {
            // A method returning Double
            def divide(u : Double, v : Double) : Double = u / v
        }
  
        // Creating objects and assigning 
        // values to the methods called
        val q = new intDivide().divide(25, 5)
        val r = new doubleDivide().divide(21.0, 5.0)
  
        // Displays output 
        println(q)
        println(r)
      
    }
}
输出:
5
4.2

在这里,抽象类Divide有一个类型参数z ,它出现在方括号中,所以该类是泛型类型,这个类型参数z可以占用每个数据类型。我们在 Generic 类中定义了一个方法divide ,它有两个变量,即uv ,这些变量的数据类型是z 。如上所述的类intDivide采用整数类型,而如上所述的类doubleDivide采用双精度类型。因此,类型参数zIntDouble数据类型取代。通过这种方式,在通用类中可以进行子类型化。

例子 :

// Scala program of using generic
// types for numeric values
import Numeric._
  
// Creating an object
object GfG
{
  
    // Main method
    def main(args: Array[String]) 
    {
  
        // Defining generic type for numeric
        // values with implicit parameter 
        def addition[N](a: N, b: N)(implicit num: Numeric[N]):
  
        // Using a method 'plus' 
        N = num.plus(a, b)
  
        // Displays the sum of two 
        // numbers
        println("The sum is : "+addition(88, 12))
    }
}
输出:
The sum is : 100

在这里,我们看到了数值的泛型类型参数,因此,我们在这里使用了符号N ,尽管任何符号都可以用作泛型类型的类型参数。