仅允许在同一个包中继承

时间:2014-04-10 01:03:48

标签: scala inheritance traits

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

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

1 个答案:

答案 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
...