Kotlin自定义RecyclerView.Adapter访问数据类变量报错咨询
报错原因
alphabetList是AlphabetData类的实例成员,必须依托类的具体实例才能访问,你直接通过类名AlphabetData调用,自然识别不到这个属性,完全不需要额外写专门的获取函数。
可选解决方法
根据你的实际使用场景选就行:
- 方案1:字母列表是固定不变的全局常量
这种场景最匹配你当前的需求,直接把类改成Kotlin单例对象,就能直接用类名访问,写法最简洁:
改完之后你原来写的package com.example.wordapp.model // 把class换成object,声明为单例,全局只存在一份实例 object AlphabetData { val alphabetList: List<Char> = ('A'..'Z').toList() }AlphabetData.alphabetList.size可以直接正常运行,不需要改适配器里的调用逻辑。
如果你不想改成单例,也可以给普通类加伴生对象实现同样的类名访问效果:package com.example.wordapp.model class AlphabetData { companion object { val alphabetList: List<Char> = ('A'..'Z').toList() } } - 方案2:需要实例化多个
AlphabetData对象,不同实例存不同的列表内容
这种情况你在适配器里先创建AlphabetData的实例,再通过实例访问属性即可:// 适配器内声明实例 private val alphabetData = AlphabetData() override fun getItemCount(): Int { return alphabetData.alphabetList.size }
额外提醒:你提到自己创建的是数据类,但贴出来的代码用的是普通
class关键字,不是data class。如果类只用来存这组固定字母,没有其他自定义状态和逻辑,用上面的object单例写法是最合适的,没必要用数据类。
内容的提问来源于stack exchange,提问作者Jaguar
相关产品推荐
相关产品推荐

