Kotlin Некорректное предупреждение об отсутствии проверки - PullRequest
0 голосов
/ 24 ноября 2018
class A
{
    val b:B
    val at:String
    init
    {
        b=B(this)
        at="A's text"
    }
}

class B(a:A)
{
    val bt:String
    init
    {
        bt= if(a.at!=null) a.at.replaceFirst("A's","B's") else "else's text"
    }

}

Этот код выдаст предупреждение

Условие 'a.at! = Null' всегда 'true'

, но на самом деле условие 'a.at! = null 'всегда ложно.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Об этом уже 3 года назад сообщалось как KT-10455 , "Kotlin позволяет использовать члены класса перед инициализацией, что приводит к исключениям времени выполнения, включая NPE для ненулевых типов".

Для временного исправления вы можете просто поменять две строки в init в class A, убедитесь, что A.at определено перед использованием.

class A
{
    val b:B
    val at:String
    init
    {
        at="A's text"
        b=B(this)
    }
}
0 голосов
/ 24 ноября 2018

Сначала необходимо инициализировать переменную at, а затем b:

class A
{
    val b:B
    val at:String
    init
    {
        at="A's text"
        b=B(this)

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...