В java - все скомпилируется и выдаст предупреждение
В kotlin - ваш компилятор не позволит вам передать null в обнуляемый или аннотированный @notnull тип
Например:
public static boolean isUserLoggedIn(@NotNull ctx: Context) {
return ...
}
// Kotlin Invocation
fun main(args: Array<String>) {
isUserLoggedIn(null)
}
И ошибка компиляции:
e: C:\_projects\test.kt: (37, 37): Null can not be a value of a non-null type Context
:app:compileDebugKotlin FAILED
FAILURE: Build failed with an exception.
В Java вы можете вызывать этот java-метод без ошибок компиляции, но в вашей IDE должно отображаться предупреждение (передача значения null параметру, аннотированному как @notnull),Кроме того, в Java вы можете передавать нулевые параметры в методы notnull kotlin.Он скомпилирует и выдаст предупреждение.
Kotlin поддерживает некоторые аннотации (например, JetBrains, Android, Eclipse).Полный список можно найти здесь: https://kotlinlang.org/docs/reference/java-interop.html#nullability-annotations
Редактировать 1 - относительно комментария:
Зависит от того, включена проверка нуля во время выполнения или нет.Kotlin, для обеспечения нулевой безопасности в сгенерированном коде добавлен вызов kotlin.jvm.internal.Intrinsics.checkNotNull
.
См .: https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/Intrinsics.java
Если значение равно NULL, NPE будет выброшено.Таким образом, NPE будет выбрасываться при каждом прохождении нуля.Каждый раз, даже если ваш код может обрабатывать нулевое значение.
Но вы можете отключить эту проверку.Тогда ваш код будет немного светлее, а также не будет выдавать исключение каждый раз, когда передается значение null.Но вы потеряете много прибыли из-за нулевой безопасности, и это также показывает, что что-то плохое в вашем дизайне.
Посмотрите, как: Отключите не нулевые проверки в Kotlin