在 Kotlin 中访问私有变量 [重复]

Posted

技术标签:

【中文标题】在 Kotlin 中访问私有变量 [重复]【英文标题】:Access private variable in Kotlin [duplicate] 【发布时间】:2020-07-24 04:46:20 【问题描述】:

所以,我正在尝试使用 Kotlin 作为 Pen and Paper RPG 伴侣开发一个 android 应用程序。现在我想做一个像这样的暴徒类

class Mob(name: String, health: Int, armor: Int) 
    private val name: String
        get() = field
    private var health: Int = 0
        get() = field
        set(value) 
            field = value
        
    private val armor: Int
        get() = field

在另一个活动中,我想显示此信息,例如

class MeinMonster : AppCompatActivity() 

    private lateinit var monster: Mob

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_mein_monster)

        monster = Mob(
            intent.getStringExtra("Name"),
            intent.getIntExtra("Health", 20),
            intent.getIntExtra("Armor", 0)
        )
        print()
    
    private fun print() 
        try 
            tvName.text = monster.name
            tvHealth.text = "LeP: $monster.health"
            tvArmor.text = "RS: $monster.armor"
         catch (ex:Exception) 
            val goBack = Intent(this, MainActivity::class.java)
            startActivity(goBack)
        
    

Android 工作室不断告诉我无法访问“名称”:它在“Mob”中是私有的。我以为这就是我得到get() 的原因?

也许有更多 Kotlin 经验的人可以提供帮助。提前谢谢你。

【问题讨论】:

您好“skranz”,欢迎来到 ***!首先,从我从您的个人资料中可以看出,您还没有通过 *** 的tour。我强烈建议您这样做,因为您可以看到 *** 的全部内容。其次,我建议你应该将你的 Mob 类转换为 Kotlin 的 data class,编译器应该自动为类中的属性定义 getter 和 setter。第三,当你用private标记你的类中的属性时,这意味着它们在类之外是不可访问的。 见***.com/questions/48998907/… 【参考方案1】:

您可以尝试更改您的数据类,如下所示:

data class Mob(val name: String, var health: Int, val armor: Int)

当您使用“val”时,您的变量将被获取,当您使用“var”时,您的变量将被获取和设置。

【讨论】:

以上是关于在 Kotlin 中访问私有变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

您可以在 Java 中访问私有变量,而无需来自非内部类的类的 getter [重复]

在继承中使用私有变量[重复]

在Python中声明私有变量[重复]

GHUnit 访问私有变量

函数中的私有变量和特权方法

Python私有变量与私有方法