我有一个类似于以下的类:
class Cat(
val whiskers: Vector[Whiskers],
val tail: hasTail,
val ears: hasEars)
我还有一个函数,它根据文件的内容初始化这些值,如下所示:
val whiskers = initWhiskers()
val cat = new Cat(whiskers = whiskers, tail = initTail(), ears = initEars())
我的问题是:在某些情况下,存在没有尾巴或耳朵的猫。如何通过允许我的一些猫对象没有耳朵而其他人与它们在一起来解释这种情况呢?
澄清:
val cat = new Cat(whiskers = whiskers, tail = null, ears = null)
val cat = new Cat(whiskers = whiskers, tail = initTail(), ears = null)
val cat = new Cat(whiskers = whiskers, tail = initTail(), ears = initEars())
我希望上述三种可能性都是可选的。这完全取决于我正在解析的文件是否具有耳朵或尾部等。
我尝试了什么:
将值设置为null(非常不成功)。 制作所有成员变量选项(这似乎是再次获取空值的冗长方式)。
任何其他选项?
谢谢!
答案 0 :(得分:1)
在Scala中,我们使用Option monad来包装可以为null的内容。
class Cat(
val whiskers: Vector[Whiskers],
val tail: Option[hasTail],
val ears: Option[hasEars]
)
val cat1 = new Cat(whiskers = whiskers, tail = None, ears = None)
val cat2 = new Cat(whiskers = whiskers, tail = Option(initTail()), ears = Option(initEars() )