Scala的sealed关键字

Scala中sealed关键字可以修饰类和特质,其主要有2个作用:

  • 其修饰的trait,class只能在当前文件里面被继承
  • 在检查模式匹配的时候,用sealed修饰目的是让scala知道这些case的所有情况,scala就能够在编译的时候进行检查,看你写的代码是否有没有漏掉什么没case到,减少编程的错误。

比如下面的代码,声明了两个trait,其中Test2是sealed声明:

trait Test1{}
sealed trait Test2{}

case class A1() extends Test1{}
case class B1() extends Test1{}
case class C1() extends Test1{}

case class A2() extends Test2{}
case class B2() extends Test2{}
case class C2() extends Test2{}

运行代码测试:

object TraitTest {
  def main(args: Array[String]) {
    val x:Test1 = new B1()
    x match {
      case x @ A1() => println("A1")
      case x @ B1() => println("B1")
    }
  }
}

上述代码运行无异常

object TraitTest1 {
  def main(args: Array[String]) {
    val x:Test2 = new B2()
    x match {
      case x @ A2() => println("A2")
      case x @ B2() => println("B2")
//      case x @ C2() => println("C2")
    }
  }
}

上述代码如果注释掉的代码没有打开,则会如下警告:

Warning:(35, 5) match may not be exhaustive.
It would fail on the following input: C2()
    x match {

 

你可能感兴趣的:(Scala)