【发布时间】:2018-01-12 20:59:31
【问题描述】:
我是来自 Java 的非常初学者的 Scala 程序员。我正在尝试建立对 Scala 特性的理解,作为 Java 接口的更好替代品。在这种情况下,我想创建一个特征,它在实现时将要求对象具有属性,并且这些属性中的一个或多个本身将是具有所需特征的对象。以下代码演示了我想要的,但它目前不起作用。
trait Person{
def name: String
def age: Int
def address extends Address
}
trait Address{
def streetName: String
def streetNumber: Int
def city: String
}
object aPerson extends Person {
override val name = "John"
override age = 25
override address = object { //this doesn't work
def streetName = "Main St."
def streetNumber = 120
def city = "Sometown"
}
}
所以我希望 Person 特征要求对象具有 Address 属性,该属性本身具有一些必需的属性。编译器不喜欢上面在aPerson 中定义address 的代码。
这样做的正确方法是什么?
额外问题:假设Address trait 仅在此处使用。有没有办法在 Person 特征内匿名定义 Address 特征,以免文件混乱?
【问题讨论】: