📜  斯卡拉 |上限

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

斯卡拉 |上限

Scala 对类型参数或类型变量有一些限制,即(类型绑定)和上限是其中之一。通过实现类型边界,我们可以阐明类型变量的约束,这些类型边界限制了类型变量的确定值,并揭示了有关这些类型成员的更多细节。上限是在类型参数上定义的。
句法

[T <: S]

其中,'T'是类型参数,'S'是类型“[T <: S]”表示该类型参数T必须与S相同或S的子类型。让我们通过示例来理解上限。
例子

// Scala Program To Demonstrate Scala Upper Bound
class GeeksforGeeks
class Author extends GeeksforGeeks
class Geeks extends Author
  
class ComputerSciencePortal
{
    // Declaration of upper bound
    def display [T <: Author](d : T)
    {
        println(d)
    }
}
  
// Object created
object ScalaUpperBounds
{
    // Driver code
    def main(args: Array[String])
    {
  
        val geeksforgeeks = new GeeksforGeeks
        val author = new Author
        val geeks = new Geeks
  
        val computerscienceportal = new ComputerSciencePortal
  
    // computerscienceportal.display(geeksforgeeks)
    computerscienceportal.display(geeks)
    computerscienceportal.display(author)
    }
}
输出:
Geeks@506e1b77
Author@4fca772d

在这里, Upper bound在类 ComputerSciencePortal 中定义,GeeksforGeeks 是 Author 的 Super 类,因此不被接受。

例子

// Scala Program To Demonstrate Scala Upper Bound
class  Principal
class Teacher extends Principal
class Student extends Teacher
  
class School
{
    // Declaration of upper bound
    def display [T <: Teacher](t: T)
    {
        println(t)
    }
}
  
// Object created
object ScalaUpperBounds
{
    // Driver code
    def main(args: Array[String])
    {
        // Defined new variable
        val principal = new Principal
        val teacher = new Teacher
        val student = new Student
  
        val school = new School
          
        // school.display(principal)
        school.display(teacher)
        school.display(student)
  }
}
输出:
Teacher@506e1b77
Student@4fca772d

在这里,我们在 Class School中定义了Upper bound ,即 [T <: Teacher],这意味着display方法接受Teacher类对象或它的子类(即 Student),这意味着不会接受 Teacher 的超类。所以,如果教师的超级班,即校长没有被评论,那么它将显示类型不匹配错误。