Kotlin中private lateinit变量声明报错:Property getter or setter expected如何解决?
修复Kotlin中lateinit变量定义的「Property getter or setter expected」错误
这个错误其实是个很容易疏忽的语法问题——你在定义lateinit变量时,漏写了变量名和类型之间的冒号:。Kotlin的变量声明规则要求必须用冒号分隔变量名与它的类型,编译器没法识别你写的private lateinit var mCustomAdapter CustomAdapter这种格式,所以才抛出了「Property getter or setter expected」的报错。
修复后的变量定义
只需要在变量名和类型之间补上冒号即可:
private lateinit var mCustomAdapter: CustomAdapter
完整代码示例
结合你的代码片段,修复后的完整写法如下:
class UIMain : AppCompatActivity() { // 修复后的私有lateinit变量声明 private lateinit var mCustomAdapter: CustomAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.layout_main) // 初始化RecyclerView的LayoutManager(示例用LinearLayoutManager) mRecyclerView.layoutManager = LinearLayoutManager(this) // 延迟赋值自定义适配器 mCustomAdapter = CustomAdapter(allList) // 给RecyclerView设置适配器 mRecyclerView.adapter = mCustomAdapter } }
额外注意事项
- 使用
lateinit时,一定要确保变量在第一次使用前完成初始化,否则会抛出UninitializedPropertyAccessException异常。 - 如果不确定变量是否一定会被初始化,也可以考虑用可空类型替代:
private var mCustomAdapter: CustomAdapter? = null,但使用时需要处理空安全(比如用?.或者!!);而lateinit则不需要每次都做空值判断,更适合确定会提前初始化的场景。
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

