无法访问数据类 kotlin 中的变量

Can't access variable in data class kotlin

提问人:macizett 提问时间:1/29/2023 更新时间:1/29/2023 访问量:587

问:

为什么我无法访问其他类中的变量?(该变量在数据类中,当我想访问它时,它会抛出“未解析的引用”)

它看起来像这样:

尝试访问变量的代码:


import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class questionActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_question)
        var nameDisplay: TextView = findViewById(R.id.nameDisplay)
        var name2 = usernameStore.username //here's the error, the "username" thing is red
        nameDisplay.setText(name2)

    }
}

数据类:

package com.ketchup.myquizzies

public data class usernameStore (
   var username: String
)

任何帮助感谢伙计们,我从字面上搜索了我想到的所有事情来解决这个问题,但我无法控制自己:(

Android Studio、Kotlin

Android Kotlin 变量 范围 数据类

评论


答:

2赞 CommonsWare 1/29/2023 #1

usernameStore是一个,而不是一个对象。您需要创建一个实例才能使用它。usernameStore

class questionActivity : AppCompatActivity() {
    val store = usernameStore()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_question)
        var nameDisplay: TextView = findViewById(R.id.nameDisplay)
        var name2 = store.username
        nameDisplay.setText(name2)

    }
}

FWIW,创建类的实例包含在这本免费书籍的本章这一部分

评论

0赞 Arnaldo 1/29/2023
另外:请记住:类名必须混合大小写,每个内部单词的第一个字母大写 (CamelCase)。在这种情况下:'QuestionActivity', 'UsernameStore'。
0赞 CommonsWare 1/29/2023
@Arnaldo:这是一个流行的惯例。但是,AFAIK,Kotlin 类没有大写规则。
1赞 Nirwal 1/29/2023 #2

您尚未创建类的实例

usernameStore

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class questionActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_question)
    var nameDisplay: TextView = findViewById(R.id.nameDisplay)
   // replace with below code
    var name2 = usernameStore().username
    nameDisplay.setText(name2)

 }
}