Ota*_*ann 8 scala nullable scala-3
当使用新的 Scala 3 的 flag 时-Yexplicit-nulls,每个没有显式非 null 注释的 Java 代码都被视为可为 null,因此每个不返回基本类型的 Java 方法都会T有效返回T | Null。
问题:在 Scala 中,String 只是java.lang.String. 由于核心 Java 不包含任何有关可为空性的注释,因此 Scala 3 将 String 方法的返回类型视为可为空。
示例:(通过 Scala REPL / sbt 控制台和 Gradle 进行尝试)
scala> val bla: String = null // check whether the compiler option is turned on
-- Error:
1 |val bla: String = null
| ^^^^
| Found: Null
| Required: String
scala> val bla: String = "hey"
val bla: String = hey
scala> bla.split("e")
val res0: Array[String | Null] | Null = Array(h, y)
Run Code Online (Sandbox Code Playgroud)
返回类型Array[String | Null] | Null完全是疯狂的。该方法的契约split显然是给出的,因为它总是返回一个数组,并且该数组总是包含至少一个字符串(并且没有一个字符串为空)。
这真的是可悲的现实吗,还是我做错了什么?
为了使上述工作正常进行,我总是必须写:
"hey".split("e").nn.map(_.nn) // this would finally give me just Array[String]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |