Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java转换为Kotlin代码时出错_Kotlin - Fatal编程技术网

将Java转换为Kotlin代码时出错

将Java转换为Kotlin代码时出错,kotlin,Kotlin,这就是我的Java代码 if(currentForecastJava.getCurrentObservation().getTempF()>=60){ mCurrentWeatherBox.setBackgroundColor(getResources().getColor(R.color.weather_warm)); mToolbar.setBackgroundColor(getResources().getColor(R.color.weather_warm)); }否则{ mCurren

这就是我的Java代码

if(currentForecastJava.getCurrentObservation().getTempF()>=60){
mCurrentWeatherBox.setBackgroundColor(getResources().getColor(R.color.weather_warm));
mToolbar.setBackgroundColor(getResources().getColor(R.color.weather_warm));
}否则{
mCurrentWeatherBox.setBackgroundColor(getResources().getColor(R.color.weather_cool));
mToolbar.setBackgroundColor(getResources().getColor(R.color.weather_cool));
}
我想做的是用Kotlin写这篇文章(知道AS有转换器,但没有改变任何东西)

我知道我需要一个compareTo()和之后的值,但我不确定该放置什么,因为我想将TempF与60进行比较,因为我想根据数据类中的TempF值更改颜色。我没有别的东西可以和它相比


我可以用Java编写,它可以与Kotlin代码的其余部分一起使用,但我尝试看看Kotlin是否可以使Java if/else变得类似,并且编写起来更快

Java和Kotlin版本几乎相同。从Java代码开始,去掉分号
null
检查进行处理,或者您通过
声明它们永远不会为空
,或使用另一个
null
运算符。您没有显示足够的代码(即进入此代码的方法签名,或所用变量的声明)来准确地告诉您需要更改的内容

有关处理
null
值的信息,请参阅:

您可能会在调用setter方法作为
something.setXyz(value)
而不是将其作为属性
something.xyz=value
时收到警告,IDE将帮助您解决这些问题,或者您可以接受警告

有关与JavaBean属性的互操作性的更多信息,请参阅:

因此,考虑到所有这些,您的最终代码(稍加清理)可能会出现如下情况:

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
}

为什么不干脆
currentObservationKotlin.tempF>=60
?我可以使用currentObservationKotlin.tempF!!>=60和一切编译和工作的预期,但不知道为什么我需要把!!。仍在尝试学习Kotlin中的null内容。当我按照上面的建议操作时,我在>=运算符上得到一个错误。我声明“以下函数都不能用提供的参数调用:public final operator fun compareTo(其他:Double):在kotlin.Double中定义的Int”。我可以使用currentObservationKotlin.tempF!!>=60和一切编译和工作的预期,但不知道为什么我需要把!!。仍在尝试学习Kotlin.getCurrentObservation()中的null内容,看起来getCurrentObservation()被声明为返回可为null的类型。你不能将一个可空类型的值与任何东西进行比较,因为如果该值为空,它将生成一个NPE。非常感谢,Awesome将研究这两个链接。我看到你也在使用猫王操作符。我试图先这样做,但无法正确创建代码。使用Kotlin创建另一个val/car是否总是比仅使用var currentTemp:Double=currentObservationKotlin好?.tempF!!只是将其设置为TextView?我只创建了其他变量,以使代码更清晰地显示步骤。它们是可选的。
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
}