我有一个具有有限数量的子类的特征。起初我使用了sealed
修饰符,并在同一个文件中定义了特征及其所有子类。在类增长之后,我决定将它们重构为单独的文件,但是一旦我这样做,我就不能再在特征上使用sealed
修饰符了,因为密封特征的所有子类都必须在同一个文件。
在Scala中,是否有类似的方法在同一个包中为特征提供有限数量的子类,跨越不同的文件,同时在进行详尽的模式匹配时仍然获得密封特征的编译时优势?
答案 0 :(得分:4)
密封是要求详尽检查的唯一方法。但是,您可以在单独的文件中定义包私有特征AGuts,BGuts,CGuts等,然后在一个文件中创建密封的子类A,B,C等,就像之前一样,但混合在其他地方定义的那些内容。 / p>
sealed abstract class Thing
class A extends Thing with AGuts
class B extends Thing with BGuts
...