我有一个父抽象类P
:
abstract class P {
def isEmpty: Boolean
}
然后我有2个子类
Empty
和NonEmpty
:class Empty extends P {
def isEmpty: Boolean = true
}
在
NonEmpty
中,我需要定义一个函数union
,如下所示:class NonEmpty(name: String) extends P {
def isEmpty: Boolean = false
def union(that: P): Unit = {
that match {
case e: Empty => print("empty")
case n: NonEmpty => print("NonEmpty:" + n.name)
}
}
}
但是,我得到了一个错误:
14: error: value name is not a member of NonEmpty
case n: NonEmpty => println("NonEmpty:" + n.name)
^
怎么会?
最佳答案
只需将name
设为该类的公共(即可见)值成员即可。
class NonEmpty(val name: String) extends P { ...
或者,您可以将其转换为
case class
。这样,该参数将自动公开,并且匹配的模式更加简洁明了。case NonEmpty(n) => print("NonEmpty:" + n)