【问题标题】:Only allow inheritance within the same package只允许在同一个包内继承
【发布时间】:2014-05-23 11:54:22
【问题描述】:

我有一个特征,它有有限数量的子类。起初我使用sealed 修饰符并在同一个文件中定义了特征及其所有子类。在类增长之后,我决定将它们重构为单独的文件,但是一旦我这样做了,由于密封特征的所有子类必须在相同的约束,我不能再在特征上使用 sealed 修饰符文件。

在 Scala 中,是否有类似的方法可以在同一个包中跨不同的文件为一个 trait 提供有限数量的子类,同时在进行详尽的模式匹配时仍然获得密封 trait 的编译时优势?

【问题讨论】:

    标签: scala inheritance traits


    【解决方案1】:

    密封是要求进行详尽检查的唯一方法。但是,您可以在单独的文件中定义包私有特征 AGuts、BGuts、CGuts 等,然后像以前一样在一个文件中创建密封的子类 A、B、C 等,但混合在其他地方定义的这些胆量中。

    sealed abstract class Thing
    class A extends Thing with AGuts
    class B extends Thing with BGuts
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      相关资源
      最近更新 更多