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

Kotlin平台声明冲突报错:JVM签名重复问题排查

平台声明冲突问题原因及解决办法

问题原因

Kotlin中类的属性会自动在JVM层面生成对应的getter方法。你定义的private val hosts属性,JVM会自动生成一个名为getHosts()的私有getter方法,而你手动编写的public fun getHosts()方法和这个自动生成的getter拥有完全相同的JVM签名,导致JVM无法区分两者,从而抛出平台声明冲突错误。

解决方案

有两种常见的解决方式:

方式一:直接公开属性,移除手动getter

Kotlin支持直接访问类的属性,无需手动编写getter方法。将hosts的可见性从private改为public,删除手动定义的getHosts()方法即可:

class HostsViewModel : ViewModel() {
    private val hostsService = HostsService()
    
    val hosts: MutableLiveData<List<Host>> by lazy {
        MutableLiveData<List<Host>>().also {
            loadHosts()
        }
    }

    private fun loadHosts(){
        hosts.value = hostsService.getHosts().body()
    }
}

外部代码可以直接通过viewModel.hosts访问该LiveData。

方式二:修改手动getter的方法名

如果需要保持hosts属性的私有性,只需修改手动编写的getter方法名称,避免和自动生成的getter重名,比如改为getHostsLiveData():

class HostsViewModel : ViewModel() {
    private val hostsService = HostsService()
    
    private val hosts: MutableLiveData<List<Host>> by lazy {
        MutableLiveData<List<Host>>().also {
            loadHosts()
        }
    }

    fun getHostsLiveData(): MutableLiveData<List<Host>> {
        return hosts
    }

    private fun loadHosts(){
        hosts.value = hostsService.getHosts().body()
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:55:20