首页 > 解决方案 > 类型不匹配:推断类型是 BluetoothDevice?但蓝牙设备是预期的

问题描述

我知道这是一个非常简单的错误,但我还不能完全理解 kotlin 的细微差别来解决它。

我收到错误:

类型不匹配:推断类型是 BluetoothDevice?但蓝牙设备是预期的

当尝试将 aBluetoothDevice作为 parcelable传递时

class ScanDevice(var device: BluetoothDevice, var rssi: Int): Parcelable {
   ...
    constructor(parcel: Parcel) : this(
        parcel.readParcelable(BluetoothDevice::class.java.classLoader), <--- here
        parcel.readInt()
    )
    ...

从技术上讲,这只是一个警告,实际上并不是一个错误,但我不确定这里发生了什么。

标签: androidkotlinbluetoothparcelableparcel

解决方案


文档Parcel.readerParcelable()说:

返回新创建的Parcelable,或者null如果已写入空对象。

这意味着,如果我们生活在 Kotlin 世界中,返回类型Parcel.readParcelable()将是T?而不是T(即它可以为空)。

由于您可以控制写作,因此您知道它不会返回 null。这意味着您可以安全地使用!!运算符将​​结果转换为不可为空的类型:

parcel.readParcelable(BluetoothDevice::class.java.classLoader)!!

推荐阅读