'A>的含义:Null`?

Kev*_*ith 6 scala

我尝试编写一个函数,如果null传递则不会编译:

$scala
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101).
Type in expressions for evaluation. Or try :help.

scala> :t null
Null

scala> def f[A >: Null](x: A):A = x
f: [A >: Null](x: A)A
Run Code Online (Sandbox Code Playgroud)

但是,它没有像我预期的那样工作:

scala> f( null )
res1: Null = null
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 6

正如已经指出的那样,A >: Null允许A为Null自己,但在这里,甚至没有事.即使A被要求是严格的超类型Null,它仍然是可能的传递null到f作为null是这些类型的有效的值(其直接从这一事实如下Null是其中的一个子类型).

如果您不想接受可空类型,则A需要将其作为子类型AnyVal.请注意,这将阻止传递任何引用类型的值 - 而不仅仅是null它本身.

如果不接受null,则无法接受引用类型.