Scala 上限
Scala对类型参数或类型变量有一些限制,即(类型界限), Upper bound 就是其中之一。通过实现类型边界,我们可以阐述类型变量的限制,这些类型边界限制了类型变量的确定值,并披露了这些类型成员的更多细节。上限是在类型参数上定义的。
语法
[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的超级类,所以它不被接受。
例子
// 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
在这里,我们在班级学校中定义了上限,即[T <: Teacher]
,这意味着 显示 方法接受教师类对象或它的子类(即学生),这意味着教师的超类将不被接受。因此,如果教师的超类,即校长没有被评论,那么它将显示类型不匹配的错误。