为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 Kotlin 中覆盖 Java 函数

无法在 Kotlin 中覆盖 Java 函数

慕桂英3389331 2021-11-11 16:56:32
我目前正在使用 Kotlin 开发一个支持 BLE 的 Android 应用程序,目标是 API 27。我正在尝试覆盖android.bluetooth.BluetoothGatt. 有许多回调可用于覆盖以启用某些 BLE 事件的处理。例如,我通过onConnectionStateChange()以下方式覆盖:private val bluetoothGattCallback = object : BluetoothGattCallback() {    override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {        /* do stuff */    }这工作得很好。我的问题源于试图覆盖onConnectionUpdated(). 此回调的定义方式onConnectionStateChange()与BLE API 源中的定义方式相同,为什么我无法覆盖它?这就是我试图覆盖它的方式(仍在BluetoothGattCallback()对象内):fun onConnectionUpdated(gatt: BluetoothGatt, interval: Int, latency: Int, timeout: Int, status: Int) {    /* do stuff */}编辑:我忘了提到,当我添加override关键字时,它提供了错误消息:OnConnectionUpdated overrides nothing.。原谅我的天真,我不经常使用 Kotlin/Java,谢谢。
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

您不应使用此方法,它仅供内部使用,而不是公共 API 的一部分。因此它是通过 隐藏的@hide。有关更多信息@hide以及如何访问它,请参阅Android 源代码中的 @hide 是什么意思?

请注意,不鼓励使用反射来访问它,如上面链接中所述

您要使用的方法位于具有以下限制深灰名单中

黑灰名单

  • 对于目标 SDK 低于 API 级别 28 的应用程序:
    允许每次使用深灰名单接口。

  • 目标 SDK 为 API 级别 28 或更高级别的应用:行为与黑名单相同

blacklist : 无论目标 SDK 是什么,都受到限制。平台的行为就像没有接口一样。例如,它会在应用程序尝试使用它时抛出 NoSuchMethodError/NoSuchFieldException,并且当应用程序想要知道特定类的字段/方法列表时不会包含它。


查看完整回答
反对 回复 2021-11-11
  • 1 回答
  • 0 关注
  • 235 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信