当前位置: 首页 > 知识库问答 >
问题:

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

祁承嗣
2023-03-14

因此,我试图用Kotlin开发一个Android应用程序,作为纸笔RPG伴侣。现在我想创造一个暴民阶层

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 studio不断告诉我不能访问“名称”:尽管它在“Mob”中是私有的。我以为这就是我得到< code>get()的原因?

也许有更多静态编程语言经验的人可以帮忙。提前谢谢你。

共有1个答案

鲁龙野
2023-03-14

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

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

当你使用" val "时你的变量将被get,当你使用" var "时你的变量将被get和set。

 类似资料:
  • 我在kotlin中初始化了一些私有Int变量。 我的问题是,当我旋转手机时,会创建一个新的is活动,在当前代码中,分数被分配为0。是否有任何方法可以只初始化一次?出路是什么? 我在使用分数创建内部有一些计算。由于 onRestoreInstanceState 是在 onCreate 之后执行的,除了在 onStart 中定义分数之外,有没有办法保持分数值在屏幕旋转时不受影响?

  • 为什么我能够直接访问的私有属性在的方法的实现中?似乎使用getter应该是访问它的唯一(如果不是,最好的实践)方式。我错过了什么?

  • 我在Angular-6服务中使用了一个私有变量。ts。 它被用来像 我想为tagSubject编写一个单元测试。 我不能做,因为它会给出错误,比如。我现在能做什么。请帮忙。

  • 问题内容: 编写以下代码时,编译器如何不抱怨? 即使它是在其中编写的同一类的实例,也不应该在处给出编译错误吗?毕竟,我试图直接访问一个私有变量。 该代码甚至可以正常运行。 问题答案: 私有成员可以从声明它的类中的任何方法访问,无论该方法是访问其自己的()实例的私有成员还是访问其他实例的私有成员。 JLS 6.6.1中 对此进行了说明: …否则,如果将成员或构造函数声明为私有,则仅当访问发生在封装成

  • 问题内容: 我希望我说的是我的话。我有这样的课: 和其他这样的类: 这是从其他类(在该示例代码中)访问和更改其值的正确方法吗,是否有更好或更合适的解决方案?请注意,这是具有方法的类。 问题答案: 从另一个类访问私有变量的正确方法是使用getter和setter方法。否则,您应该将该变量公开。 那是: 但是,直接返回私有数据是一种不好的做法- 允许外部代码修改您的私有状态。通常,您应该返回私有数据的

  • 问题内容: 我正在尝试编写一种使用反射将在类中获取私有字段的方法。 这是我的课程(此示例已简化): 所以说我这样做: 我得到一个因为是私人的。有没有一种方法可以使用反射来获取/设置私有变量?(我已经在C#中完成了,但这是我第一次在Java中尝试过它)。如果您想知道为什么需要这样做:),这是因为有时在单元测试期间,将私有变量设置为虚假值以进行故障测试等很方便。 问题答案: 弄清楚了。需要