The ?
在您的代码中,值意味着这些某些参数可以为空。
locationComponent.lastKnownLocation?.latitude?.toDouble()
This locationComponent.lastKnownLocation?
意思是lastKnownLocation
可以为空,因此latitude
可以为空(纬度本身也可以为空,我不知道,因为我看不到模型)。
Point.fromLngLat(lat, lng)
不接受空值,这意味着你在这里需要小心。
您可以通过检查代码看看是否可以解决此问题lastKnownLocation
确实可以为 null,或者它只是一个未注释的 java 参数,因此编译器不会如何处理它,因此它会安全地进行操作。
在这种特殊情况下(当你知道它不能为空的事实时)你可以使用!!
声明该值不为空(但如果你错了,这将抛出一个 NPE)。
您还可以尝试通过提供默认值来降低风险,但是,您如何处理该默认值呢?您将其分配到世界的哪个部分?也许您还有其他有意义的位置组件,例如居住国家/地区的中部等(这一切都取决于代码的其余部分)。
val lat = locationComponent.lastKnownLocation?.latitude?.toDouble() ?: 0.0
val lng = locationComponent.lastKnownLocation?.longitude?.toDouble() ?: 0.0
Here, lat
and lng
将被设置为0.0
如果它们为空。
但根据您的情况,当您没有值时,您可能实际上不想拨打该电话。所以你可以尝试事先检查它们是否为空。
val lat = locationComponent.lastKnownLocation?.latitude?.toDouble()
val lng = locationComponent.lastKnownLocation?.longitude?.toDouble()
if(lat != null && lng != null) origin = Point.fromLngLat(lat, lng)
但在这种情况下,您的原点尚未设置。但如果这些值确实可以为空,那么也许不设置原点是有意义的。
我强烈建议您阅读以下内容:Kotlin 中的空安全