【发布时间】:2019-06-09 08:48:30
【问题描述】:
我刚刚开始学习 scala。在类中,带有val 和var 的主要构造函数参数是公共的,而没有val 或var 的参数是私有值。因此,当我尝试执行以下代码时,一切正常。
import scala.collection.mutable.ArrayBuffer
class Cat(val name: String)
class Dog(val name: String)
val dog = new Dog("Harry")
val cat = new Cat("Sally")
val animals = ArrayBuffer.empty[Any]
animals.append(dog)
animals.append(cat)
animals.foreach(pet => println(pet.name))
但我收到以下错误:
ScalaFiddle.scala:12: error: value name is not a member of scala.this.Any
animals.foreach(pet => println(pet.name)) // Prints Harry Sally
为什么会这样?
【问题讨论】:
-
您使用参数“Any”对“ArrayBuffer”进行了参数化,因此现在“pet”被编译器视为“Any”,但“Any”中没有“name”字段。您需要包含两个宠物的“名称”的通用超类型,并用它参数化“ArrayBuffer”而不是“Any”
标签: scala class-hierarchy