调用.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
相关产品推荐
相关产品推荐

