#android-studio #kotlin
Вопрос:
У меня есть эта ярко-зеленая подсветка в каком-то коде, который я написал:
Что Android Studio пытается мне сказать?
В строке прокрутки нет соответствующей строки, значка желоба, подсказки и специального действия Alt Enter.
Моя цветовая гамма настроена на «Классический свет». Вот как это выглядит в Даркуле:
Комментарии:
1. Интеллектуальное приведение к типу, не допускающему обнуления, из-за
msg.event!!
предшествующего ему?2. @MikeM. Я так не думаю. Я использовал утверждения не-null в других местах, и это единственное, что загорается.
3. @MikeM. На самом деле ты на что-то наткнулся. Я просто нарочно написал одну, и она тоже загорелась. Хотя, кажется, он не загорается, когда он член класса.
4. Я замечал это несколько раз, и это был единственный вывод, который имел смысл из моего краткого тестирования, но я никогда по-настоящему не исследовал его дальше. Это действительно казалось немного странным, но это могло быть просто из-за тонких различий в коде, которые я не осознавал в то время.
Ответ №1:
Это интеллектуальное приведение, которое происходит потому, что вы утверждаете, что event
оно не равно нулю. event
Свойство класса message должно быть неизменяемым, то есть оно одновременно является a val
и не имеет пользовательского геттера. (Или это может быть последнее поле, определенное в классе Java.)
Интеллектуальное приведение выполняется только для локальных переменных (не записанных в приложении) и неизменяемых свойств (определенных в том же модуле или помеченных private
), поскольку в противном случае компилятор не может гарантировать, что значение не изменилось с момента последнего утверждения его типа/возможности обнуления.