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

调用.removeLast()遇API等级报错及NoSuchMethodError问题求助

问题分析与解决

问题原因

你遇到的是方法绑定冲突:

  • Kotlin标准库确实提供了removeLast()扩展函数,原本可兼容所有Android API等级;
  • 但从Android API 35开始,Java的java.util.List接口新增了同名默认方法removeLast();
  • 当你的minSdk低于35时,编译器会错误地将代码绑定到Java的新方法上,而低版本设备的系统库中没有该方法,运行时就抛出NoSuchMethodError;
  • 你导入的kotlin.collections.removeLast未被使用,正是因为编译器优先选择了Java的方法。

解决方案

有两种可靠的修复方式:

1. 明确调用Kotlin扩展函数

直接指定调用Kotlin标准库的扩展函数,避免与Java方法混淆:

modelInstance.apply{
    if(isEmpty()){
        this += modelLoader.createInstancedModel(model, 10)
    }
}.run { kotlin.collections.removeLast(this) }

2. 使用全API兼容的替代方法

按照错误提示,用remove(size - 1)替代removeLast(),该方法在所有Android版本中均存在:

modelInstance.apply{
    if(isEmpty()){
        this += modelLoader.createInstancedModel(model, 10)
    }
}.remove(size - 1)

修改后代码示例

关键部分的代码修改如下:

val modelNode = ModelNode(
    modelInstance = modelInstance.apply{
        if(isEmpty()){
            this += modelLoader.createInstancedModel(model, 10)
        }
    }.remove(size - 1), // 替换为兼容写法
    scaleToUnits = 0.2f
).apply {
    isEditable = true
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:12:40