Scala密封特性
特质
Scala中的密封特性用于在Scala应用程序中进行详尽的检查。由于进行了详尽的检查,该程序允许在单个文件中声明密封特征的成员。
这可以通过预先提供特征的所有可能成员的列表来帮助编译器。这减少了我们代码中出错的机会。
让我们看一下代码块,这里有一个特征,所有成员都用它声明。
sealed trait trait1{} class class1 extends trait1 class class2 extends trait1 class class3 extends trait1
现在,由于我们具有密封的特征,因此将使用详尽的检查,这将要求包括该特征的所有子类型,否则将发出警告。
示例
sealed trait royalEnfield { val speed= 110; } class bullet extends royalEnfield { override val speed = 125; } class thunderbird extends royalEnfield { override val speed = 137; } class continental extends royalEnfield { override val speed = 152; } object myObject { def main(args: Array[String]) { val bullet350 = new bullet; val thbd350 = new thunderbird; val gt = new continental; println(topSpeed(bullet350)); println(topSpeed(thbd350)); println(topSpeed(gt)); } def topSpeed(Article: royalEnfield): Int = Article match { case bullet350: bullet =>bullet350.speed; case thbd350: thunderbird =>thbd350.speed; case gt: continental =>gt.speed; } }
输出结果
125 137 152
特质的某些特征
编译器预先知道特征的所有子类型,这有助于通过引发警告来避免错误。
密封特性的继承仅由声明特性的文件内的类允许。在外部文件中,如果类尝试扩展特征,则编译器将抛出错误。
为了防止上述类型的继承,通常将枚举特性与枚举一起使用。