将Java转换为Kotlin代码时出错

时间:2017-06-02 14:48:35

标签: 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类似且更快地编写。

1 个答案:

答案 0 :(得分:1)

Java和Kotlin版本几乎相同。从Java代码开始,删除分号;,然后可以使用null检查处理任何可以为空的内容,或者断言它们永远不会为!!为空,或者使用另一个null运算符。您没有显示足够的代码(即进入此代码的方法签名,或使用的变量的声明),以告诉您确切需要更改的内容。

有关处理null值的信息,请参阅:In Kotlin, what is the idiomatic way to deal with nullable values

您可能最终会在调用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
}