Intereting Posts
Почему строка json null, когда я передаю внутренний объект Gson (). ToJson (object) в Kotlin? Kotlin, когда несколько значений не работают, когда значение представляет собой вид android Какие пакеты / функции импортируются по умолчанию в Котлин? Дженерики: абстрактный класс и тип ребенка получение переопределения исключение Тип возвращаемого метода не должен включать переменную типа или подстановочный знак в котлин ViewModel for Fragment вместо доступа к Activity ViewModel? Повторение действий с состоянием с помощью RxJava Получите множественное число и сингл от блока Chrono Time Что делать: делать в Котлине? Может ли аппликация быть реализована «красиво» в котлин? Как найти все классы в пакете, используя отражение в kotlin Kotlin call типы платформы Java приводят к llegalStateException Проект Android Kotlin не смог синхронизировать проект Gradle Как отладить NoClassDefFoundError (Gradle, Kotlin) Kotlin не может найти компонент Dagger при построении с вариантом сборки версии

Ошибки при преобразовании Java в код Kotlin

Итак, это мой Java-код, который работает

if (currentForecastJava.getCurrentObservation().getTempF() >= 60) { mCurrentWeatherBox.setBackgroundColor(getResources().getColor(R.color.weather_warm)); mToolbar.setBackgroundColor(getResources().getColor(R.color.weather_warm)); } else { mCurrentWeatherBox.setBackgroundColor(getResources().getColor(R.color.weather_cool)); mToolbar.setBackgroundColor(getResources().getColor(R.color.weather_cool)); } 

То, что я пытаюсь сделать, это написать это в Kotlin (знаете, что AS имеет конвертер, но ничего не меняет)

 if (currentObservationKotlin.tempF.compareTo() >=) currentWeatherBox.setBackgroundColor(resources.getColor(R.color.weather_warm)) toolbar.setBackgroundColor(resources.getColor(R.color.weather_warm)) else currentWeatherBox.setBackgroundColor(resources.getColor(R.color.weather_cool)) toolbar.setBackgroundColor(resources.getColor(R.color.weather_cool)) 

Я знаю, что мне нужно значение в compareTo () и после, но я не совсем уверен, что разместить, поскольку я хочу сравнить TempF с 60, так как я хочу, чтобы цвет изменялся на основе значения TempF из класса данных. У меня нет другого объекта для сравнения.

Я могу написать это на Java, и он работает с остальной частью кода Kotlin, но пытается выяснить, может ли Kotlin сделать Java if / else похожим и быстрее писать.

Solutions Collecting From Web of "Ошибки при преобразовании Java в код Kotlin"

Версия Java и Kotlin будет почти одинаковой. Начните с кода Java и оставьте точки с запятой ; и тогда все, что МОЖЕТ быть обнуляемым, должно обрабатываться либо с помощью null проверок, либо с утверждением, что они никогда не будут иметь значение null !! , или используя другой null оператор. Вы не показываете достаточно кода (т. Е. Подпись метода, входящего в этот код, или объявление используемых переменных), чтобы точно указать, что нужно изменить.

Для обработки null значений см.: В Kotlin, какой идиоматический способ справиться с значениями NULL

В результате вы можете вызвать метод setter как something.setXyz(value) вместо того, чтобы назначать его как свойство something.xyz = value а IDE поможет вам исправить эти или вы можете жить с предупреждением.

Подробнее о функциональной совместимости со свойствами JavaBean см .: Java Interop: Getters and Setters

Поэтому, имея в виду все это, ваш последний код (с немного большей очисткой) может выглядеть примерно так:

 val currentTemp = currentForecastJava.getCurrentObservation()?.getTempF() ?: -1 // or change -1 to whatever default you want if there is no observation if (currentTemp >= 60) { val warmColor = getResources().getColor(R.color.weather_warm) mCurrentWeatherBox.backgroundColor = warmColor mToolbar.backgroundColor = warmColor } else { val coolColor = getResources().getColor(R.color.weather_cool) mCurrentWeatherBox.backgroundColor = coolColor mToolbar.backgroundColor = coolColor }