gpt4 book ai didi

scala - 需要层次结构时如何使用案例类?

转载 作者:行者123 更新时间:2023-12-03 20:25:54 25 4
gpt4 key购买 nike

我知道你不允许从案例类继承,但是当你真的需要时你会怎么做?我们在一个层次结构中有两个类,它们都包含许多字段,我们需要能够创建两者的实例。这是我的选择:

  • 如果我将父类(super class)设为普通类而不是案例类 - 我将失去所有案例类的优点,例如 toString、equals、hashCode 方法等。
  • 如果我把它作为一个案例类,我会打破不从案例类继承的规则。
  • 如果我在子类中使用组合 - 我必须编写大量方法并将它们重定向到另一个类 - 这将意味着大量工作并且会感觉非 Scalaish。

  • 我该怎么办?这不是很普遍的问题吗?

    最佳答案

    是的,这是一个经常出现的问题,我建议创建一个具有所有父属性的特征,创建一个仅实现它的案例类,然后创建另一个继承它的具有更多属性的案例类。

    sealed trait Parent {
    /* implement all common properties */
    }

    case class A extends Parent

    case class B extends Parent {
    /*add all stuff you want*/
    }

    看它的一个好方法是一棵树,特征是节点,案例类是叶子。

    您可以根据对父级的需要使用特征或抽象类。但是,请避免使用类,因为您将能够创建它的实例,这并不优雅。

    编辑:正如评论中所建议的,如果模式匹配中没有涵盖所有案例类,您可以密封特征以便在编译时出现异常。例如,在“Scala 编程”的第 15.5 章中对此进行了说明

    关于scala - 需要层次结构时如何使用案例类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648313/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com