I noticed that calling some Android SDK method from Kotlin I got Platform Type instead of null-safety type even Android SDK
.java file contains
Then I found
@Nullable annotation is stripped off when compiled into bytecode because Android SDK using
android.annotation.Nullable which is hidden from API (AOSP Nullable).
android.annotation.Nullable is for internal usage only.
Here comes the question. Which package of
@Nullable should I use on Java code?
We have JetBrains's
org.jetbrains.annotations.Nullable 、 JDK's
javax.annotation.Nullable and Android's
android.support.annotation.Nullable. There are a lot more ...
android.support.annotation.Nullable on Android because Android Studio's Lint tool only looks for it.
If you're not targeting Android, you have to check which nullness annotation your linter used if you had any.
Story from Kotlin
Kotlin dev team struggled on the same issue. Null-safety types and Java interoperability are like trying to have your cake and eat it too.
Kotlin team tried many approaches and ended up at checking every nullness annotations on the market and infer appropriate null-safety type. Leaving platform type if there's no annotation, you take full control on it.