直接引用内部case类中的值或方法



我想让组合案例类的API更干净一些。因此,考虑一个经典示例的修改版本:

case class Address(street: String, city: String, zip: String) {
some large collection of methods
}
case class Person(name: String, address: Address) {
val street = address.street
val city = address.city
val zip = address.zip
}

现在,我喜欢这个,因为你可以直接从person.city这样的人那里获得地址信息,而不需要person.address.city

然而,如果我们假设Addresscase类上有大量的值或方法,那么在Person类中使用val x = address.x将是乏味的。是否有某种方法可以直接从一个人那里访问地址中的字段、值和方法,而无需手动映射它们?

一个选项是使用隐式转换。但我无法证明这种方法有多干净:
case class Address(street: String)
case class Person(name: String, address: Address) {
private val s = this.street
}
implicit def person2address(p: Person): Address = p.address
Person("alex", Address("street")).street

也可以使用自类型:

case class Person(name: String, address: Address) {
_: Address =>
private val s = street
}

最新更新