【发布时间】:2012-10-03 09:13:18
【问题描述】:
我有一个基于 Squeryl 的应用程序。我将模型定义为案例类,主要是因为我发现拥有复制方法很方便。
我有两个严格相关的模型。字段是一样的,很多操作是通用的,要存放在同一个DB表中。 但是有些行为只在两种情况中的一种情况下才有意义,或者在两种情况下都有意义但不同。
到目前为止,我只使用了一个案例类,带有一个区分模型类型的标志,并且所有基于模型类型而不同的方法都以 if 开头。这很烦人,而且不是很安全。
我想做的是考虑祖先案例类中的常见行为和字段,并让两个实际模型继承自它。但是,据我了解,从案例类继承在 Scala 中是不受欢迎的,如果子类本身就是一个案例类(不是我的案例),甚至是禁止的。
从案例类继承时我应该注意哪些问题和陷阱?对我来说这样做有意义吗?
【问题讨论】:
-
你不能继承一个非案例类,或者扩展一个共同的特征吗?
-
我不确定。这些字段在祖先中定义。我想根据这些字段获取复制方法、相等等。如果我将父级声明为抽象类,将子级声明为案例类,是否会考虑父级上定义的参数?
-
我认为不是,您必须在抽象父(或特征)和目标案例类中定义道具。最后,很多样板,但至少类型安全
标签: scala inheritance case-class