case class C(x: D)
↓
object C {
def apply(x: D) = new C(x)
}
Не приводил к казусам вроде:case class C(x: D)
object C { type D = Double }
↓
object C {
type D = Double
def apply(x: D) = new C(x)
}
Как говорится, science. It works. Низкотехнологичные решения в таких ситуациях вынуждены прибегать к очень некрасивым хакам для реализации того, что в гигиеничных системах достигается забесплатно.