You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Play Billing 5.0.0 Kotlin:如何重写onProductDetailsResponse()?

问题解答

没错,Java和Kotlin在这里的写法差异确实是语言特性导致的:

  • Java 必须显式实现 ProductDetailsResponseListener 接口并重写 onProductDetailsResponse 方法,因为Java不支持单抽象方法(SAM)的简化转换。
  • Kotlin 支持SAM转换,对于只有一个抽象方法的接口,可直接用lambda表达式替代接口实现,不需要显式写override fun onProductDetailsResponse()。

举个实际写法对比:

Java写法(必须实现接口)

queryProductDetailsAsync(params, new ProductDetailsResponseListener() {
    @Override
    public void onProductDetailsResponse(BillingResult billingResult, List<ProductDetails> productDetailsList) {
        // 处理结果逻辑
    }
});

Kotlin写法(用lambda简化)

queryProductDetailsAsync(params) { billingResult, productDetailsList ->
    // 处理结果逻辑
}

你添加override fun onProductDetailsResponse()时提示“nothing to override”,是因为你的类并没有实现ProductDetailsResponseListener接口,自然没有可重写的方法。如果一定要用接口实现的方式,也可以显式声明:

class MyBillingListener : ProductDetailsResponseListener {
    override fun onProductDetailsResponse(billingResult: BillingResult, productDetailsList: List<ProductDetails>) {
        // 处理结果逻辑
    }
}
// 调用时传入实例
queryProductDetailsAsync(params, MyBillingListener())

但这种写法在Kotlin里属于冗余写法,官方示例用lambda就是为了简化代码。

内容的提问来源于stack exchange,提问作者Yanay Lehavi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:20:36