Ниже приведен код, я пытаюсь запустить:Scala UpperBound и LowerBound концепция
class Student {
def printDetails = println("I am a student")
def printSomeOtherDetails = println("I love Studying")
}
class ComputerScienceStudent extends Student {
override def printDetails = println("I am a Computer Science Student")
override def printSomeOtherDetails = println("I love Scala")
}
class InformationTechnologyStudent extends Student {
override def printDetails = println("I am an Information Technology Student")
override def printSomeOtherDetails = println("I love Java")
}
class MyGenericClassForUpperBound {
def printStudentDetails[S <: Student](student: S) = {
student.printDetails
student.printSomeOtherDetails
}
}
class MyGenericClassforLowerBound {
def printStudentDetails[S >: ComputerScienceStudent](student: S) = {
student.printDetails
student.printSomeOtherDetails
}
}
метод printStudentDetails
из MyGenericClassforLowerBound
создает проблему. Заявления student.printDetails
и student.printSomeOtherDetails
говорят мне
value printDetails is not a member of type parameter S
Насколько я понял:
Q[A <: B]
означает, что класс/методQ
может принимать какие-либо объекты классаA
где классA
типа юга от классаB
. Это называется Верхняя граница.Q[A >: B]
означает, что класс/методQ
может принимать любые объекты классаA
, где классA
является супертипом классаB
. Это называется нижней границей.
Пожалуйста, помогите мне, если мое понимание ошибочно и поможет мне понять, почему вышеуказанная проблема наступает. Спасибо, парни.
Perfect. Большое спасибо за такое ясное объяснение. Я отмечаю это как ответ. –
Возможно, что любая более правильная терминология Scala, чем Object (которая является типичным для Java)? – Suma
Just FYI, Scala 'AnyRef' отображает на Java' Object'. Тип Scala 'Any' включает коррелирует с примитивными типами Java. См. Http://www.scala-lang.org/api/current/index.html#scala.AnyVal –