斯卡拉 |上限
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 的超类。所以,如果教师的超级班,即校长没有被评论,那么它将显示类型不匹配错误。