リストと各製品の両方で、どの製品がどのブランドに関連しているかを言うことで、なぜ情報を繰り返しているのか疑問に思います。
それでも、あなたはそれを行うことができます:
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)))
残念ながら、名前によるパラメータはケースクラスでは許可されていないようです。
この同様の質問も参照してください:不変のペアオブジェクトのインスタンス化