pyjnius java抽象类实现

Posted

技术标签:

【中文标题】pyjnius java抽象类实现【英文标题】:pyjnius java abstract class implementation 【发布时间】:2017-02-27 23:20:53 【问题描述】:

我正在尝试实现 android.bluetooth.le.ScanCallback,这是一个使用 pyjnius 的抽象类。在我实例化下面给出的 python 类的那一刻,有一个 JVM 错误。该错误表明 android.bluetooth.le.ScanCallback 不是接口类。我相信接口是一个抽象类。我错过了什么?

class ScanCallback(PythonJavaClass):
    
    __javainterfaces__ = ['android/bluetooth/le/ScanCallback'] 

    def __init__(self, scanCallback, batchCallback=None, errorCallback=None):
        super(ScanCallback, self).__init__()
        self.batchCallbk = batchCallback
        self.scanCallbk = scanCallback
        self.errorCallbk = errorCallback
        pass

    @java_method ('(L/java/utils/List<ScanResult>/)V')
    def onBatchScanResults(self,results): 
        print dir(results)

    @java_method ('(I)V')   
    def onScanFailed(self, errorCode):
        print "failed to scan" + str(errorCode)
        raise ValueError(str(errorCode))
    
    @java_method ('(IL/android/bluetooth/le/ScanResult)V')
    def onScanResult(self, callbackType, result):
        print dir(result)

【问题讨论】:

【参考方案1】:

我发现使用 PyJNius 只能实现接口类(纯抽象类)而不是抽象类。 “android/bluetooth/le/ScanCallback”是一个抽象类,而不是早期蓝牙 API (

【讨论】:

这是android上java接口共有的问题。如果 Google 将用户类作为接口提供,这样第三方 api 可以提供它们,那就太好了。 Android 使用不同的字节码系统阻止了正常的方法。

以上是关于pyjnius java抽象类实现的主要内容,如果未能解决你的问题,请参考以下文章

java基础09- 抽象类

Java面向对象之抽象类,接口

Java的抽象类

Flutter/Dart - Dart中的抽象类 多态 和接口

golang变相实现抽象类

Dart9(九)抽象类、多态、 接口