Kotlin数据类变量访问报错:Unresolved Reference问题求助
解决Kotlin Data Class变量访问「unresolved reference」错误
错误原因
你直接通过类名usernameStore.username访问成员变量是错误的——Kotlin数据类的成员变量属于实例对象,而非类本身,必须先创建类的实例,或者将变量改为类级别的属性才能直接通过类名访问。
解决方法
方法1:创建数据类实例后访问
如果usernameStore的实例是从其他页面传递过来的,比如通过Intent:
// 假设在之前的页面传递数据 val user = usernameStore("张三") val intent = Intent(this, questionActivity::class.java) intent.putExtra("USER_DATA", user) startActivity(intent)
在questionActivity中接收并访问:
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.TextView import com.ketchup.myquizzies.usernameStore class questionActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_question) var nameDisplay: TextView = findViewById(R.id.nameDisplay) // 接收传递的实例 val user = intent.getSerializableExtra("USER_DATA") as usernameStore var name2 = user.username nameDisplay.setText(name2) } }
如果只是临时创建实例测试:
var user = usernameStore("测试用户名") var name2 = user.username
方法2:将变量改为伴生对象属性(类级别)
修改usernameStore数据类,把username放到伴生对象中,这样可以直接通过类名访问:
package com.ketchup.myquizzies public data class usernameStore ( var username: String ) { companion object { // 类级别的变量,可直接通过usernameStore.username访问 var globalUsername: String = "" } }
在questionActivity中访问:
var name2 = usernameStore.globalUsername
方法3:改用单例对象(适合全局共享数据)
如果只是用来存储全局的用户名,没必要用数据类,直接用Kotlin的object单例更合适:
package com.ketchup.myquizzies object usernameStore { var username: String = "" }
这样就可以直接在questionActivity中用usernameStore.username访问,和你原本的写法一致。
额外检查
确保在questionActivity中已经导入了usernameStore类:
import com.ketchup.myquizzies.usernameStore
内容的提问来源于stack exchange,提问作者macizett
相关产品推荐
相关产品推荐

