ope*_*sas 6 oop scala relationship
我有一个Brand类,有几个产品
在产品类中,我希望对品牌有一个参考,如下所示:
case class Brand(val name:String, val products: List[Product])
case class Product(val name: String, val brand: Brand)
Run Code Online (Sandbox Code Playgroud)
我怎么能把这些课程打包?
我的意思是,除非我有品牌,否则我无法创造产品
除非我有产品清单(因为Brand.products是val),否则我无法创建品牌
建模这种关系的最佳方法是什么?
我想问一下为什么要重复这些信息,说明哪些产品与列表和每个产品中的哪个品牌有关.
不过,你可以这样做:
class Brand(val name: String, ps: => List[Product]) {
lazy val products = ps
override def toString = "Brand("+name+", "+products+")"
}
class Product(val name: String, b: => Brand) {
lazy val brand = b
override def toString = "Product("+name+", "+brand.name+")"
}
lazy val p1: Product = new Product("fish", birdseye)
lazy val p2: Product = new Product("peas", birdseye)
lazy val birdseye = new Brand("BirdsEye", List(p1, p2))
println(birdseye)
//Brand(BirdsEye, List(Product(fish, BirdsEye), Product(peas, BirdsEye)))
Run Code Online (Sandbox Code Playgroud)
不幸的是,似乎不允许使用名称类来保护案例类.
另请参阅此类似问题:实例化不可变配对对象
| 归档时间: |
|
| 查看次数: |
564 次 |
| 最近记录: |