什麼段落的意思是,在情況下你有一個固定的層次結構是這樣的:
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類型發出。