android - 类型不匹配:推断类型是 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()
)
...
从技术上讲,这只是一个警告,实际上并不是一个错误,但我不确定这里发生了什么。
解决方案
的文档Parcel.readerParcelable()
说:
返回新创建的
Parcelable
,或者null
如果已写入空对象。
这意味着,如果我们生活在 Kotlin 世界中,返回类型Parcel.readParcelable()
将是T?
而不是T
(即它可以为空)。
由于您可以控制写作,因此您知道它不会返回 null。这意味着您可以安全地使用!!
运算符将结果转换为不可为空的类型:
parcel.readParcelable(BluetoothDevice::class.java.classLoader)!!
推荐阅读
- laravel - Laravel + Vue 如何显示所选项目的值?
- java - Antlr4 - 获取函数的参数 Java
- regex - 正则表达式多行将单词的所有首字母大写并删除空格记事本++
- python - Python TypeError:CommandEvent.GetString():参数太多
- php - 从标签传递变量也是一个 Html 表单
- javascript - 将数据从父组件传递到子条目组件角度 6
- macos - 不允许 Chown,有完整的 Sudo 访问权限吗?
- sql - Rails 具有多条记录的复杂查询设置
- java - 我应该为 Galaxy S8+/S9+ 使用什么值文件夹
- rxjs - RXJS:条件映射或合并映射