首先看一段代码,List的定义
sealed abstract class List[+A] extends AbstractSeq[A]
with LinearSeq[A]
with Product
with GenericTraversableTemplate[A, List]
with LinearSeqOptimized[A, List[A]]
with scala.Serializable {
list 所有子类
可以看到list的所有子类都在
package scala package collection package immutable
这个下面。
其实仔细查看可以知道sealed 定义的子类都在List里面。
sealed 定义的所有子类只能在同源代码块里。不能在其他地方继承或者实现,如果你想去实现,会有下面异常
那么sealed 有什么用呢,
1)放在被继承或者实现
2)当与标签特征联合使用时,可以用case 遍历所有情况,代码如下:
object Implicit {
def whatFruit(fruit: Fruit) = fruit match {
case Apple => s" I am a Apple"
case Banana => s"I am a Banana"
}
def main(args: Array[String]): Unit = {
var fruit = Apple
println(whatFruit(fruit))
}
}
trait Fruit
case object Apple extends Fruit
case object Banana extends Fruit
case object Orange extends Fruit
object Fruit{
val values = Vector(Apple, Banana,Orange)
}
这里例子中英文match 没有覆盖所有的情况,应该是会报警告的
“match may not be exhaustive”
但当前版本应该是修复这个问题了,没有任何警告
经查证:从2.1.2版本修复,不会出现
“match may not be exhaustive”警告了
输出为:
"C:\Program Files\Java\jdk1.8.0_40\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.2\lib\idea_rt.jar=52956:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_40\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_40\jre\lib\rt.jar;F:\book\spark\learn-spark\target\scala-2.12\classes;C:\Users\Administrator\.ivy2\cache\org.scala-lang\scala-library\jars\scala-library-2.12.2.jar" test.Implicit
I am a Apple
Process finished with exit code 0
正常输出,