在参数化 class 中调用 class 类型的方法时出错
Getting error on calling method of a class type in parameterized class
抛出以下异常:
InheritanceTest.sc:15: 错误:值 bark 不是类型参数 T 的成员
k9.bark
密码是:
class Dog {
def bark: Unit = {
println("bhow bhow!")
}
}
class Puppy extends Dog {
override def bark: Unit = {
println("woof woof!")
}
}
class Animal[+T](val k9: T) {
def voice: Unit = {
k9.bark
}
}
object InheritanceTest{
def main(args: Array[String]): Unit = {
val puppy = new Puppy
val dog = new Dog
val k91 = new Animal[Dog](dog)
val k92 = new Animal[Puppy](puppy)
k91.voice
k92.voice
println("Done.")
}
}
Scala 专家能否提供解决方案或说明代码中的错误?提前感谢您的帮助。
你需要像这样
用upper type boundDog
约束类型参数T
T <: Dog
否则编译器认为T
代表所有类型,并不是所有类型都有bark
。因此尝试
class Animal[+T <: Dog](val k9: T) {
def voice: Unit = {
k9.bark
}
}
抛出以下异常: InheritanceTest.sc:15: 错误:值 bark 不是类型参数 T 的成员 k9.bark
密码是:
class Dog {
def bark: Unit = {
println("bhow bhow!")
}
}
class Puppy extends Dog {
override def bark: Unit = {
println("woof woof!")
}
}
class Animal[+T](val k9: T) {
def voice: Unit = {
k9.bark
}
}
object InheritanceTest{
def main(args: Array[String]): Unit = {
val puppy = new Puppy
val dog = new Dog
val k91 = new Animal[Dog](dog)
val k92 = new Animal[Puppy](puppy)
k91.voice
k92.voice
println("Done.")
}
}
Scala 专家能否提供解决方案或说明代码中的错误?提前感谢您的帮助。
你需要像这样
用upper type boundDog
约束类型参数T
T <: Dog
否则编译器认为T
代表所有类型,并不是所有类型都有bark
。因此尝试
class Animal[+T <: Dog](val k9: T) {
def voice: Unit = {
k9.bark
}
}