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

Kotlin val差吸气剂覆盖与分配

龙景澄
2023-03-14
class SampleArray(val size: Int) {
    val isEmpty get() = size == 0  // size is set at the beginning and does not change so this is ok
}

class SampleArray(var size: Int) {
    fun isEmpty() { return size == 0 }  // size is set at the beginning but can also change over time so function is prefered
}

但是仅仅从使用的角度来看,就像在指南中一样,以下两者之间的区别在哪里

class SampleArray(val size: Int) {
    val isEmpty get() = size == 0  // size can not change so this can be used instad of function
    val isEmpty = size == 0        // isEmpty is assigned at the beginning ad will keep this value also if size could change
}

从这个答案中我可以看出,对于getter重写,该值没有存储。getter覆盖与赋值有什么不同吗?也许是代表或者拉丁裔?

共有1个答案

翟嘉年
2023-03-14

在第二个示例中,size是不可变值,因此两种方法都有效。

但是,具有重写getter的变量get()=size==0没有备份字段,因此每次访问isempty变量时都会对size==0进行计算。

另一方面,当使用initializer=size==0时,表达式size==0会在构造过程中被计算(在这里请准确检查何时以及如何操作--深入查看Kotlin的初始化器)并存储到备份字段,然后在访问变量时返回该字段的值。

 类似资料:
  • 问题内容: 有人可以帮助我迅速了解正确使用吸气剂和吸气剂的方法。我对它的印象与说Java不一样。 这是Swift中用于存储和访问类变量的正确用法吗? 问题答案: 斯威夫特提供了更结构化的方法来和比Java。 你可以,但你应该 不会 ,写getter和setter方法就像你在你的代码一样。 相反,(如果您使用)只需声明可见性为non的属性即可(例如,在我的示例中)。这样,您班级外的呼叫者将可以查看属

  • 问题内容: 我在读这篇文章,了解为什么和邪恶。本文没有说过 不要 使用它们,而是告诉您以限制使用这些方法的方式进行思考,或者引用该文章: 不要要求您进行工作所需的信息;询问具有信息的对象为您完成工作。 当您需要在GUI中显示数据但没有getter方法时会发生什么?本文简要介绍了这一点,但并不完整。它提到将JComponent传递给类,但是如果您要进行GUI更改,则可能需要进行很多工作才能修复。 例

  • 问题内容: 我知道Java中关于布尔型getter的约定包括前缀“ is”。 但是,如果主题是复数呢?也就是说,如果我不想知道某个商店是否已营业,而又想知道所有商店是否已营业怎么办? 用英语没有意义。 我很想写这样的getter: 我认为这是有意义的,但我一直在别人告诉我,我应该只是吮吸它,抛弃主题动词协议和使用,,。 无论如何,对于在复数主题上运算的布尔型吸气剂,我该怎么办? 问题答案: 我不记

  • 问题内容: 如果在这样的调用中收到NullPointerException: 我得到了一个无用的异常文本,例如: 我发现很难找出哪个调用实际上返回了null,经常发现自己将代码重构为如下形式: 然后等待更具描述性的NullPointerException,该异常告诉我要查找的行。 你们中的某些人可能会认为,连接吸气剂是不好的风格,无论如何都应避免,但是我的问题是:我可以在不更改代码的情况下找到错误

  • 问题内容: 我有一堂课,看起来像下面这样: 我的hibernate映射文件按如下所示映射属性: 我收到以下错误: 看来hibernate不喜欢我的大写字母。我该如何解决? 问题答案: 应该管用…

  • 问题内容: 我想在两次调用getter和setter之后编写我的业务逻辑,因为我在业务逻辑中使用了它们的对象值。但是,在吸气剂之前调用了Construct,Post构造,actionevents..。 那么,如果我不想在内部获取业务逻辑,该如何使用它们的值呢? 问题答案: 我想导航到该站点并从显示在outputText中的数据库中获取数据。 在bean的(后)构造函数中执行该工作。 与 当我更改(