【发布时间】:2020-05-21 00:14:42
【问题描述】:
Gradle 在其 API 中提供以下类:https://docs.gradle.org/5.6.4/javadoc/org/gradle/api/tasks/ScalaRuntime.html
这个类有一个简单的构造函数,它接受一个Project 实例。但是,在我的情况下,我手头没有Project,但我仍然想使用这个类的其他方法,这些方法并不真正依赖于这个值,所以我决定将null 值传递给构造函数:
val scalaRuntime = ScalaRuntime(null)
但是,编译器失败并出现以下错误:
Null can not be a value of a non-null type Project
我不确定这里会发生什么,因为显然这是一个 Java 类,而不是 Kotlin,并且没有可空性注释。 Kotlin 怎么会拒绝这个代码?我假设它需要 Project! 类型的值(即平台类型),而不是不可为空的类型。
现在解决这个问题的唯一方法是使用反射来调用这个构造函数,这自然可以很好地工作,所以这个构造函数并不需要一个真正的不可为空的参数。
我在这里缺少什么?为什么 Kotlin 假定构造函数参数是非空的?
【问题讨论】:
-
我猜这里,但有些方法用
@Nullable注释,所以 Kotlin 很可能得出结论,任何没有注释的方法都是不可为空的。 -
@Andreas 这就是我在“没有可空性注释”下的真正意思——确实没有:github.com/gradle/gradle/blob/v5.6.4/subprojects/scala/src/main/…
-
@Andreas 不,这是包装上的注释。
标签: java gradle kotlin types nullable