什么段落的意思是,在情况下你有一个固定的层次结构是这样的:
sealed trait Foo
class Bar extends Foo
class Baz extends Foo
class Zab extends Foo
然后,当你在它的模式匹配,如果你已经尝试匹配的编译器可以推断所有可能的类型延长密封特性,在这个例子:
def f(foo: Foo) = foo match {
| case _: Bar => println("bar")
| case _: Baz => println("baz")
| }
<console>:13: warning: match may not be exhaustive.
It would fail on the following input: Zab()
def f(foo: Foo) = foo match {
^
f: (foo: Foo)Unit
注意document的开头说:
封闭类不得直接继承,除非继承的 模板在与继承类相同的源文件中定义。
这是Scala独有的,不能用Java完成。即使在同一文件中声明,Java中的final
类也不能被继承。这就是为什么这个逻辑不适用于Scala中的String
,这是java.lang.String
的别名。编译器警告只能针对符合上述条件的Scala类型发出。