Kotlin开发中如何在另一个类中访问adapter_comm_recver的stringrec值
你当前定义的stringrec是priiint方法内的局部变量,仅在方法执行过程中存在,方法执行结束后就会被系统回收,其他类无法直接访问该局部变量,需要调整变量的作用域或增加传递逻辑,常用实现方案如下:
方案1:提升为类公开成员属性
适合需要随时主动获取最新值的场景,修改adapter_comm_recver类代码,将stringrec提升为类成员属性:
class adapter_comm_recver(){ // 提升为类成员属性,private set限制仅类内部可修改,避免外部随意篡改 var stringrec: String = "" private set fun priiint(editTInput: String){ stringrec = editTInput Log.e("tag1",stringrec) } }
类B只要持有adapter_comm_recver的实例,即可直接访问该属性:
class B(private val recverInstance: adapter_comm_recver) { fun testGetValue() { val targetValue = recverInstance.stringrec // 后续按需处理targetValue即可 } }
方案2:通过回调实时传递值
适合不需要持久存储值,只需要在stringrec更新时同步通知类B的场景,无需主动轮询取值:
首先修改adapter_comm_recver类,增加回调监听:
class adapter_comm_recver(){ // 定义值更新回调接口 interface OnStringUpdateListener { fun onUpdate(newValue: String) } // 外部可设置监听器实例 var updateListener: OnStringUpdateListener? = null fun priiint(editTInput: String){ val stringrec = editTInput Log.e("tag1",stringrec) // 值更新时通知监听器 updateListener?.onUpdate(stringrec) } }
类B实现回调接口即可实时收到值:
class B : adapter_comm_recver.OnStringUpdateListener { init { // 初始化时将自身设置为监听器 val recver = adapter_comm_recver() recver.updateListener = this } // 每次priiint方法被调用,该方法会自动收到最新的stringrec值 override fun onUpdate(newValue: String) { // 按需处理newValue即可 } }
注意:如果两个类生命周期不同步,使用回调方案时需要在不需要监听时及时清空
updateListener引用,避免内存泄漏。
内容的提问来源于stack exchange,提问作者Code Scan
相关产品推荐
相关产品推荐

