在参数化 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
  }
}