2014-04-10 49 views
4

我有一个特征,它将有一个有限数量的子类。起初,我使用sealed修饰符,并将特征及其所有子类定义在同一个文件中。课程增长后,我决定将其重构为单独的文件,但是一旦我这样做了,由于约束条件,密封特征的所有子类都必须位于同一文件中,所以我不能再使用sealed修饰符。只允许在同一包中继承

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

回答

4

密封是要求彻底检查的唯一方法。然而,你可以在单独的文件中定义包 - 私有特征AGuts,BGuts,CGuts等,然后在一个文件中创建如前所述的密封的子类A,B,C等,但混合在其他地方定义的那些内核中。

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