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

Android转Kotlin最佳实践:Java子类转Kotlin后方法引用报错解决

问题分析与解决方案

核心问题

  1. IDE自动转换的Kotlin代码采用了纯Kotlin属性风格,原Java的getAbbreviation()方法在Kotlin中被替换为直接属性访问,无需手动调用getter方法
  2. 你的调用代码存在拼写错误:getAbbrevation()少了字母i,且getLangaugeByID少了字母u,这也是导致报错的原因之一

最佳转换方式

方式1:纯Kotlin风格(推荐)

直接用Kotlin属性替代Java的私有字段+getter,代码更简洁,符合Kotlin语法习惯:

open class Language(ctx: Context, id: Int, val abbreviation: String, name: String) :
    DataBaseObject(ctx, id, name)

调用时直接访问属性即可:

val locale = Locale(dbc.getLanguageByID(SELECTED_LANGUAGE_ID).abbreviation)

注:修正了原调用代码中的两处拼写错误:getLangaugeByID→getLanguageByID,getAbbrevation()→直接访问abbreviation属性

方式2:兼容Java风格getter(适配旧代码)

如果需要保留原Java的getAbbreviation()方法以兼容历史代码,可以显式定义:

open class Language(ctx: Context, id: Int, private val abbreviation: String, name: String) :
    DataBaseObject(ctx, id, name) {
    fun getAbbreviation(): String {
        return abbreviation
    }
}

此时调用修正拼写后的getAbbreviation()方法即可正常运行:

val locale = Locale(dbc.getLanguageByID(SELECTED_LANGUAGE_ID).getAbbreviation())

额外优化点

自动转换的代码中出现的ctx!!和name!!可以去掉,因为父类构造参数ctx和name都是非空类型,子类传递非空参数更安全,避免空指针风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:37:16