Ярко-зеленая подсветка в Android Studio

#android-studio #kotlin

Вопрос:

У меня есть эта ярко-зеленая подсветка в каком-то коде, который я написал:

скриншот

Что Android Studio пытается мне сказать?

В строке прокрутки нет соответствующей строки, значка желоба, подсказки и специального действия Alt Enter.

Моя цветовая гамма настроена на «Классический свет». Вот как это выглядит в Даркуле:

скриншот

Комментарии:

1. Интеллектуальное приведение к типу, не допускающему обнуления, из-за msg.event!! предшествующего ему?

2. @MikeM. Я так не думаю. Я использовал утверждения не-null в других местах, и это единственное, что загорается.

3. @MikeM. На самом деле ты на что-то наткнулся. Я просто нарочно написал одну, и она тоже загорелась. Хотя, кажется, он не загорается, когда он член класса.

4. Я замечал это несколько раз, и это был единственный вывод, который имел смысл из моего краткого тестирования, но я никогда по-настоящему не исследовал его дальше. Это действительно казалось немного странным, но это могло быть просто из-за тонких различий в коде, которые я не осознавал в то время.

Ответ №1:

Это интеллектуальное приведение, которое происходит потому, что вы утверждаете, что event оно не равно нулю. event Свойство класса message должно быть неизменяемым, то есть оно одновременно является a val и не имеет пользовательского геттера. (Или это может быть последнее поле, определенное в классе Java.)

Интеллектуальное приведение выполняется только для локальных переменных (не записанных в приложении) и неизменяемых свойств (определенных в том же модуле или помеченных private ), поскольку в противном случае компилятор не может гарантировать, что значение не изменилось с момента последнего утверждения его типа/возможности обнуления.