You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:02:51