因此,我试图用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()的原因?
也许有更多静态编程语言经验的人可以帮忙。提前谢谢你。
您可以尝试将您的类更改为数据类,如下所示:
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中尝试过它)。如果您想知道为什么需要这样做:),这是因为有时在单元测试期间,将私有变量设置为虚假值以进行故障测试等很方便。 问题答案: 弄清楚了。需要