Kotlin报Conflicting declarations错误,同名adapter声明冲突如何解决
报错原因
你遇到的是Kotlin的变量声明冲突问题,在onCreate方法的同一局部作用域内,你两次声明了同名的adapter变量:
- 第一次:
lateinit var adapter: NewsListAdapter,可变类型局部变量 - 第二次:
val adapter = NewsListAdapter(items),只读类型局部变量
Kotlin语法不允许同一作用域内存在同名变量,无论变量的可变性、类型是否一致,都会触发该报错。
修复方案
根据你的实际使用需求,二选一即可:
- 如果你仅需要在
onCreate方法内使用adapter,直接删除第一次的lateinit声明即可,调整后代码如下:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) lateinit var recyclerView: RecyclerView recyclerView.layoutManager = LinearLayoutManager(this) val items = fetchData() val adapter = NewsListAdapter(items) recyclerView.adapter = adapter }
- 如果你后续需要在
MainActivity的其他方法中访问adapter,则保留第一次的声明,删除第二次声明前的val关键字,直接给已声明的变量赋值即可,调整后代码如下:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) lateinit var recyclerView: RecyclerView lateinit var adapter: NewsListAdapter recyclerView.layoutManager = LinearLayoutManager(this) val items = fetchData() adapter = NewsListAdapter(items) recyclerView.adapter = adapter }
小提示:如果需要在类的多个方法中访问recyclerView或adapter,建议将变量声明提到onCreate方法外,作为类的成员变量,避免局部变量作用域限制。
内容的提问来源于stack exchange,提问作者S Ti
相关产品推荐
相关产品推荐

