Scala 案例类继承

2023-12-12

我有一个基于 Squeryl 的应用程序。我将模型定义为案例类,主要是因为我发现复制方法很方便。

我有两个严格相关的模型。字段是相同的,很多操作是共同的,并且要存储在同一个DB表中。But有些行为仅在两种情况之一中有意义,或者在两种情况下都有意义但有所不同。

到目前为止,我只使用了一个案例类,带有一个区分模型类型的标志,并且所有基于模型类型而不同的方法都以 if 开头。这很烦人,而且类型不太安全。

我想做的是考虑祖先案例类中的常见行为和字段,并让两个实际模型继承它。但是,据我了解,从案例类继承在 Scala 中是不受欢迎的,如果子类本身就是案例类(不是我的案例),甚至会被禁止。

从案例类继承时应该注意哪些问题和陷阱?对于我的情况来说这样做有意义吗?


我在没有代码重复的情况下避免案例类继承的首选方法有些明显:创建一个公共(抽象)基类:

abstract class Person {
  def name: String
  def age: Int
  // address and other properties
  // methods (ideally only accessors since it is a case class)
}

case class Employer(val name: String, val age: Int, val taxno: Int)
    extends Person

case class Employee(val name: String, val age: Int, val salary: Int)
    extends Person


如果您想要更细粒度,请将属性分组为单独的特征:

trait Identifiable { def name: String }
trait Locatable { def address: String }
// trait Ages { def age: Int }

case class Employer(val name: String, val address: String, val taxno: Int)
    extends Identifiable
    with    Locatable

case class Employee(val name: String, val address: String, val salary: Int)
    extends Identifiable
    with    Locatable
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala 案例类继承 的相关文章

随机推荐

  • 日期时间转 JavaScript 日期

    Stackoverflow 上的另一个答案是从 Javascript 日期到 net DateTime 的转换 long msSinceEpoch 1260402952906 Value from Date getTime in JavaS
  • 在球体上使用多个纹理 [Three.js]

    是否可以在球体上加载多个纹理 我的意思是说有什么办法Three js将球体分割成n碎片 单独纹理它们并再次将这些碎片渲染为整个球体 我不想在球体上加载整个纹理 而是只渲染用户首先在屏幕上看到的那些部分 并且当用户旋转球体时 必须加载纹理的其
  • 在边框中间剪开

    我试图实现悬停时看起来像图像的边框 我不知道如何描述边界 但有什么方法可以实现这一点吗 text width 100px height 20px text align center text hover border 1px solid b
  • Blazor 中的轮询线程

    我正在使用 REST API 和 Web 界面构建 Blazor 应用程序 我还将有一个应用程序的监视部分 它将每秒从许多不同的数据源轮询数据 我在一个单独的类中创建了一个长时间运行的线程 它只是轮询我想要的数据 并且似乎工作正常 我使用的
  • 如何检查字典是否为空?

    我正在尝试检查字典是否为空 但它的行为不正常 它只是跳过并显示ONLINE除了显示消息之外没有任何其他内容 有什么想法吗 def isEmpty self dictionary for element in dictionary if el
  • iPod Touch 上的飞行模式——重新审视

    情况是这样的 我们有一个记录声音的应用程序 如果应用程序在第二代 iPod Touch 上运行且飞行模式关闭 则由于 iPod 的 WIFI 活动 录音中会出现周期性噪音 因此 我想检测我们是否正在第二代 iPod Touch 上运行 我知
  • 如何以另一个用户(la /netonly)身份启动 Internet Explorer 进程?

    我正在尝试从我们的 WPF 应用程序中以另一个用户身份启动 Internet Explorer 以便当我们的用户访问 内部 网站时 他们会通过集成 Windows 身份验证进行静默身份验证 我们不想以其他用户身份启动 iexplore ex
  • Android是如何定义屏幕分辨率的呢?

    在Android中 您可以通过适当命名res目录来为不同的手机属性定义不同的资源 我需要能够支持不同的布局480x800 and 480x854 我想我可以将一组资源存储在layout hdpi v4目录中 另一组资源存储在layout l
  • C:如何比较两个字符串? [复制]

    这个问题在这里已经有答案了 Edit 这是重复的 我已将其标记为重复 参见 问题 为什么 C 语言中 a a 所以我试图根据结构中的字段打印出特定的消息 该字段包含字符串 1 每当我跑步时printf s record fields 2 输
  • 在 Objective-C 方法中引用 BOOL 值

    这是代码的一小部分 interface BOOL isCarryingmallet implementation BOOL isCarryingWeapon return isCarryingMallet int getWeaponDama
  • 在“源/网络”选项卡中复制多个 URL

    是否可以在 Chrome 开发工具的 源 或 网络 选项卡中提取多个资源的 URL 当我想获取某个 URL 时single资源 我可以使用上下文菜单功能来完成复制链接地址 我可以从 网络 选项卡切换到此资源 反之亦然 但如果我需要获取以下
  • 正则表达式 - 从字符串中提取电话号码

    我需要从带有分隔符 波形符 的字符串中提取两个电话号码 棘手的部分是电话号码的格式可能会有所不同 字符串模式保持不变 但电话号码的格式可以是以下三种类型之一 1 4 digit extensions ex 1001 2 10 digit 5
  • Jenkins 持续集成服务器的作业特定 SVN 签出文件夹

    我刚刚设置了一个新的 Jenkins CI 服务器 这是我昨天刚安装的最新版本 我已经完成了几个工作正常的构建 我有几个不同的存储库 它可以从中提取和构建 其中大多数适用于 NET 项目等易于在任何地方构建的项目 因此只需在工作区文件夹中签
  • 带有 GoDaddy 证书的 HTTP SSL - 此服务器的证书链不完整

    一般来说 我从 GoDaddy 获得了 3 个文件 主证书文件 服务器私钥 捆绑文件 通过以下方式在我的 Go 服务器中配置了所有这些文件 cert err tls LoadX509KeyPair myalcoholist pem myal
  • 访问 Struts 2 中的所有用户会话

    我正在使用 JPA 构建 struts 2 应用程序 用户可以多次登录该应用程序 我想 用户能够在网格中查看他的所有会话 并可能突出显示当前会话 并且用户可以选择一个会话并终止它 管理员还应该能够查看所有登录的用户 还可以查看每个登录用户的
  • 如何更改元素的内部文本而不更改其子元素

    我有一个 html 元素 例如 div Change only me div but not me div div 但我只想更改第一个文本并保留子 div 不变 document getElementById el1 innerText c
  • Jquery 自动完成 utf-8 字符区分大小写

    我正在使用 jquery 自动完成插件来搜索一长串名称 它适用于所有拉丁语和英语字符 但对于土耳其语字符我遇到问题 因为搜索将区分大小写 例如 A and a将匹配包含以下内容的所有城市A or a and i不会匹配像这样的城市 stam
  • Flexbox 内的图像高度在 Chrome 中不起作用

    我有一个div using flexbox将其项目居中 里面这个div我有 3 个元素 其中之一是图像 div div div img src alt div div div container1 and container2有自己的身高
  • 尝试遮盖图像周围的圆圈不起作用

    我有一个图像 我试图在周围遮盖一个圆圈 使图像看起来是圆形的 这有点有效 但圆圈在顶部和底部达到一个点 profileImageView layer cornerRadius profileImageView frame size widt
  • Scala 案例类继承

    我有一个基于 Squeryl 的应用程序 我将模型定义为案例类 主要是因为我发现复制方法很方便 我有两个严格相关的模型 字段是相同的 很多操作是共同的 并且要存储在同一个DB表中 But有些行为仅在两种情况之一中有意义 或者在两种情况下都有