Scala中的final和sealed有什么区别?
⭐️⭐️⭐️⭐️
final:禁止继承,重写,可用于类,字段,方法/函数。
sealed:允许同文件内继承,禁止被外部任何地方继承。可用于类,抽象类,特质。
从整体上讲,如果将类型系统当作一个树,sealed主要用于构建ADTs,sealed trait是ADTs的根,而final case class是ADTs的叶子,这意味着该ADTs具有有限个数的子类,同时编译器能在编译期正确分析类型关系,故模式匹配是通常是安全的,而不安全的模式匹配通常会有编译警告。(排除编译器bug)这也是为什么要尽可能使用match而不是if的原因之一。if不具备模式分析(match analysis)。
谈到1.2点及格
能从类型系统的层次结构看,答到叶子+模式匹配,满分
Last updated
Was this helpful?