как обнаружить обнуляемый при вызове java в kotlin - PullRequest
0 голосов
/ 12 марта 2020
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1){
            val callingPkg = referrer.host

когда я использую этот код в Kotlin для получения реферера действия, я сталкиваюсь с краткой sh:

java .lang.IllegalStateException: referrer не должно быть пустым

Причина, по которой реферер имеет значение null, но я прочитал код, который getReferrer уже пометил @Nullable Почему IDE может уведомить меня о том, что это может привести к появлению Null? По сравнению с этим я пишу свой класс как:

public class LilyTest {
    @Nullable
    public Uri getUri(){
        long millis = System.currentTimeMillis();
        return  millis %2 == 1 ? null:new Uri.Builder().scheme("android-app").authority("mReferrer").build();
    }
}

, когда я использую

val pkg = LilyTest().uri.host

. Я могу получить ошибку, пометить строку красным и объяснить: «Только безопасно (?.) Или не -принято (!!.) разрешены вызовы на обнуляемом получателе типа Uri? "

Мой вопрос: почему я не могу получить уведомление об ошибке при использовании referrer.host, есть ли различия?

1 Ответ

0 голосов
/ 12 марта 2020

получить реферер для Activity ... Я прочитал код, который getReferrer уже пометил как @ Nullable

Согласно документации это не , хотя комментарий говорит, что он действительно может вернуть ноль. Вы можете использовать внешние аннотации , чтобы отметить его (Kotlin понимает их с 1.3.40, см. «Использование внешних аннотаций в IntelliJ IDEA» здесь ).

...