重命名并覆盖案例类中的 equals 方法

2024-01-18

我想定义一个名为Ext重命名现有的equals方法equalsByAttributes并定义了一个新的equals同时方法。该特质被使用 扩展案例类。我当前的解决方案看起来有些古怪:

case class A(id: Int) extends Ext

trait Ext { p: Product =>
    // new implementation
    override def equals(obj: Any) = obj match {
        case that: AnyRef => this eq that
        case _ => false
    }

    // reimplementation of old equals implementation
    def equalsByAttributes(obj: Any) = obj match {
        case that: Product =>
            if (this.getClass.isAssignableFrom(that.getClass) || that.getClass.isAssignableFrom(this.getClass))
                p.productIterator.toList == that.productIterator.toList
            else
                false
        case _ => false
    }
}

想知道有没有直接参考的方法A's equals中的方法equalsByAttributes这样就可以避免重新实现这种方法?

编辑2012-07-12

由于有一个解决方案可以引用超级实现super.METHOD_NAME我认为一定有类似的语法,例如overridden.METHOD_NAME用于访问将由特征扩展的基类/特征中的特定实现,以便我的Ext特质看起来像这样:

trait Ext { p: Product =>
    override def equals(obj: Any) = ...

    def equalsByAttributes(obj: Any) = overridden.equals(obj)
}

不要更改案例类的 equals。如果您需要这样做,请不要将您的课程设为案例类。更改案例类方法将使代码表现出意外(即与案例类不同),这将增加维护成本,破坏假设案例类像案例类一样工作的一切,让人们的生活变得悲惨,让很多程序员讨厌你。

换句话说,这是不值得的。不要那样做。

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

重命名并覆盖案例类中的 equals 方法 的相关文章

随机推荐

  • DetectionAPI 仅支持单声道 Wav

    我正在开发一个拍手检测 Android 应用程序 我在用musicg https github com madyx musicgapi 用于此 我从github导入了该项目并在android设备上运行 然后这个错误显示 DetectionA
  • Memcache 错误:无法从流 (0) 数组读取行

    当我们的服务器承受任何重大负载时 我会收到以下错误的一些变化 我已经在谷歌上搜索了几个小时并尝试了一切 包括升级到最新版本和全新安装 我已经阅读了 SA 上所有关于它的帖子 但无法弄清楚 很多人都有同样的问题 但似乎没有人有明确的答案 任何
  • Ga特林 j.n.ConnectException:地址已在使用中

    当使用 Ga特林运行模拟时 我遇到以下异常 j n ConnectException 地址已在使用中 没有更多信息 当测试的服务器无法响应或超时时是否会发生这种情况 我想确保这是服务器抛出的异常 而不是客户端抛出的异常 我在 Windows
  • AWS 负载均衡器连接到同一服务器上的多个端口,无需 PAT

    我有一个 EC2 Web 服务器 它提供一个侦听端口 80 8080 443 和 8443 的应用程序 外部客户端需要在这些端口上与其通信 无端口转换 我试图将其放在负载平衡器后面 但过多的所需端口让我感到困惑 我有一个 ALB 监听 4
  • 当 NFS 挂载失败时,bash 检查目录是否存在挂起

    我有一个 bash profile 脚本 它根据目录存在为我设置一些别名 if d home user games then alias cdgames cd home user games fi 这些目录之一位于 NFS 挂载上 如果文件
  • 如何在 JSON Schema 中制作二维数组?

    下面的二维数组怎么写JSON 架构 http json schema org 网格固定为16 13 它包含完全空的行或具有 int 0 99 或空字符串等值的行 这是数组的示例 94 78 37 78 61 71 42 82 53 62 6
  • PyObjC + Xcode 3.2 + 非 Apple Python

    我想开始尝试使用 PyObjC 开发一些简单的应用程序 我安装了 PyObjC 和 Xcode 模板 我知道 PyObjC 本身可以工作 因为我已经运行了这个脚本 http svn picidae net trunk pici server
  • 从二进制文件中删除 protobuf C++ 编译的路径字符串

    当我编译使用 Protobuf 的 C 程序 然后运行 linux 时strings二进制文件上的命令 其中一个字符串是生成的路径cc文件 包含我的主目录和所有内容 显然 我想从二进制文件中删除我的主目录和其他个人信息 该路径从何而来以及如
  • c 中 qsort() 函数中的 cmpfunc

    有人可以解释一下吗cmpfunc这是用在qsort功能 什么是a and b在这个函数中 它们指向什么 int cmpfunc const void a const void b return int a int b a and b in
  • 如何在 Django 中使用 Pusher?

    我正在尝试使用 Pusher 和 django 构建一个应用程序 我浏览了一些链接 例如https github com pusher django pusherable https github com pusher django pus
  • 删除 Android Gallery 小部件中的边框?

    如何去除图库图像周围丑陋的灰色边框 在 ImageAdapter 中排除此行以停止加载该预设 imageBackground ta getResourceId R styleable Gallery1 android galleryItem
  • 为什么 jsessionid 附加到每个 url 后面?

    我正在 Apache Tomcat 上使用 Spring 框架部署一个应用程序 直接从 Tomcat 运行应用程序时 任何 URL 中根本没有附加 jsessionid 但是在将应用程序映射到域并尝试运行它之后 我在应用程序中的每个 URL
  • SPARQL 两个节点之间的路径

    给定一个图 prefix da
  • Delphi:将 TImage 置于前面

    看下图 如您所见 我无法将按钮发送到后面 这仅适用于标签 那么我该如何发送TImage到前面以其透明度 顺便说一句我读过这个相关问题 https stackoverflow com questions 5369681 controls on
  • Rails 3.2 水豚 Capybara::ElementNotFound: 无法找到 xpath“/html”

    我正在尝试使用 rspec 2 10 0 capybara 1 1 2 测试我的 Rails 应用程序 这是我的测试文件 require spec helper describe AdminPanelController do descri
  • 过程宏可以作为函数进行调试吗?

    我正在尝试调试我正在使用的库中的复杂程序宏 由于我无法将调试器与宏一起使用 并且各种宏扩展工具已被证明在这里毫无用处 因此我正在寻找替代方案 程序宏可以像函数一样运行并进行适当的调试吗 我想象存储结果proc macro TokenStre
  • 从通用音量控制检测应用程序启动

    我有一个针对芒果设备的应用程序 它通过BackgroundAudioAgent 播放音乐 因此 它与通用音量控制 UVC 集成 有没有办法通过点击 UVC 中的艺术家详细信息来检测应用程序何时启动 或者 有没有办法设置深度链接供 UVC 使
  • trust-ncg 仍然存在“Newton-CG 方法需要雅可比”问题

    我指的是中提到的问题当 jac False 时不使用雅可比行列式进行近似时 牛顿 CG 方法需要雅可比行列式 https stackoverflow com q 33926357 6481544 我遇到了同样的问题 要求 jacobian
  • SQL 命令未正确结束?

    我正在使用具有临时关系的 SQL 语句 并且收到错误ORA 009933 SQL command not properly ended 我不认为该声明有任何问题 因此非常感谢任何帮助 声明是 SELECT Temp name Temp Av
  • 重命名并覆盖案例类中的 equals 方法

    我想定义一个名为Ext重命名现有的equals方法equalsByAttributes并定义了一个新的equals同时方法 该特质被使用 扩展案例类 我当前的解决方案看起来有些古怪 case class A id Int extends E