Kotlin - 了解 Getter 和 Setter

2024-03-26

Kotlin 自动生成它的 getter 和设置,但我从不引用它们?另外,在 Kotlin 中编写自定义 getter/setter 的正确方法是什么?当我说myObj.myVar = 99我感到myVar是一个公共领域myObj我直接访问?这里到底发生了什么?


这个问题已经在一些地方得到了回答,但我想我应该为那些从 Java/C#/C/C++ 过渡到 Kotlin 的人分享一个具体的例子,他们和我有同样的问题:

我很难理解 Kotlin 中的 getter 和 setter 是如何工作的,特别是因为它们从未被显式调用(就像在 Java 中一样)。因此,我感到不舒服,因为看起来我们只是直接将 vars/vals 引用为字段。因此,我做了一个小实验来证明情况并非如此,事实上,当您访问变量/值时,Kotlin 中会调用隐式(自动生成)或显式 getter/setter。不同之处在于,您没有明确要求默认的 getter/setter。

来自文档 https://kotlinlang.org/docs/reference/properties.html- 声明属性的完整语法是:

var <propertyName>: <PropertyType> [= <property_initializer>]
   [<getter>]
   [<setter>]

我的例子是

class modifiersEg {

/** this will not compile unless:
 *      - we assign a default here
 *      - init it in the (or all, if multiple) constructor
 *      - insert the lateinit keyword    */
var someNum: Int?
var someStr0: String = "hello"
var someStr1: String = "hello"
    get() = field  // field is actually this.someStr1, and 'this' is your class/obj instance
    set(value) { field = value }

// kotlin actually creates the same setters and getters for someStr0
// as we explicitly created for someStr1

var someStr2: String? = "inital val"
    set(value) { field = "ignore you" }

var someStr3: String = "inital val"
    get() = "you'll never know what this var actually contains"

init {
    someNum = 0

    println(someStr2) // should print "inital val"

    someStr2 = "blah blah blah"
    println(someStr2) // should print "ignore you"

    println(someStr3) // should print "you'll never know what this var actually contains"
}

我希望这有助于其他人将所有内容整合在一起?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin - 了解 Getter 和 Setter 的相关文章

  • 如何使用 Gradle Kotlin DSL 运行 kotlintest 测试?

    我想要什么 我想使用运行我的测试科特林测试 https github com kotlintest kotlintest 我通过单击测试类旁边的图标成功从 IntelliJ 运行它们 我也有JUnit 5 https junit org j
  • 如何在 NavHostFragment 中检索当前片段?

    我试图在新的导航组件中找到一种方法 但我没有找到任何相关内容 我当前的目的地是 mainHostFragment findNavController currentDestination 但我无法获得对显示片段的任何引用 参考显示的片段 A
  • 使用 gradle kotlin dsl 执行 JavaExec 任务

    我创建了简单的build gradle kts file group com lapots breed version 1 0 SNAPSHOT plugins java java sourceCompatibility JavaVersi
  • SecurityException: getSerial: 用户 10134 不满足访问设备标识符的要求

    我想从 Android 手机获取 Build getSerial 在 Android O 之前 我需要 Manifest permission READ PHONE STATE 权限 但是在 Android 10 中我遇到了上述异常 我所做
  • Jetpack Compose - 布局可重用组件

    为了练习 Jetpack Compose 中的可重用组件 我开始了一些练习 见下图 正如我想象的那样 绿色行 输入行以及之间的行具有相同的结构 第一个元素获得了可用空间 第二个元素获得了 50 dp 最后一个元素获得了 70 dp 我尝试将
  • 使用 Kotlin for Android 编写库有开销吗?

    我正在考虑将 Java Android 库移植到 Kotlin 我真的很喜欢 Kotlin 相对于 Java 的好处应该可以减少库中的错误数量 由于该库面向资源受限的环境 我担心将库移植到 Kotlin 会产生额外的开销 与 Java 库相
  • 从 kotlin 多平台项目创建 fat jar

    我最近从旧的 1 2 多平台切换到 1 3 不同之处在于 每个多平台模块都有一个 build gradle 文件 我有 5 个 因此配置少了很多 但是 我似乎无法配置使用 jvm 平台的所有依赖项创建可运行的 fat jar 我曾经在 jv
  • 如何让 Kotlin 类型安全构建器在 Scala 中工作?

    Kotlin 很棒类型安全的构建者 https kotlinlang org docs reference type safe builders html这使得创建像这样的 dsl 成为可能 html head title The titl
  • JobService 在 android 9 中不会重新安排

    我正在尝试让我的应用程序在 Android 9 上运行 以下代码在 Android 8 上运行良好 但由于某种原因 JobService 不会在 android 9 上重新安排 它第一次被安排 但不会根据到设定的周期 class Retri
  • 如何更改 Kotlin 上生成的 TODO() 函数体?

    我需要在我的代码上留下一些稍后要做的事情TODO 自动生成的会产生一个很长的评论 如下所示 TODO not implemented To change body of created functions use File Settings
  • 在 Android 中处理多个回收器视图 [Kotlin]

    我遇到过这样的情况 一个布局上有 3 个 RecyclerView 他们以某种方式相互依赖 数据来自房间数据库 问题原型 问题陈述 假设您有类似 Floor1 Floor2 Floor3 等 的楼层 并且每个楼层内都有类似 Room1 Ro
  • groovy 无法解析 kotlin 类

    由于我无法解决我遇到的问题kotlin 我决定回到groovy为了实现该插件 但是我遇到了这个问题 我有这样的项目结构 为了不重写所有类 我决定重用中实现的类kotlin 然而我的课FileProcessingCoreGroovy Down
  • ktor 客户端发布多部分/表单数据

    如何使用 ktor 客户端将文件作为多部分 表单数据发布 我想将它用于电报机器人 API 发送文档 我需要获得与curl命令相同的结果 curl F document path to some file https api telegram
  • 如何从 Java 类调用 Kotlin 类

    我需要将意图从 java 活动传递到 Kotlin 活动 Java活动ProfileActivity class Intent selectGameIntent new Intent ProfileActivity this kotlin
  • 尝试使用资源/使用/多个资源

    我使用的 Java API 大量使用了 Autoclosable Interface 因此在 Java try with resources 中 然而在Java中你可以指定 try res1 res2 res3 我们有办法使用多种资源吗 它
  • 当创建 Android Jetpack Compose AndroidView 的参数发生变化时,如何替换它?

    我有一个应用程序 显示封装在其中的几个不同视图AndroidView 在下面重现的简单示例中 这些只是TextView实例 问题是更改文本 在本例中循环显示三个不同的值 似乎不会更新应用程序显示的内容 sealed class AppVie
  • Kotlin 协程阻塞 Android 中的主线程

    我是 Kotlin 和协程的新手 我有一个fun在我的活动及其内部 检查User用户名和密码 如果为真 则返回Users object 一切都好 但是当我按下按钮时 我的活动被阻止并等待响应Users login 我用这个有趣的 priva
  • Kotlin JavaScript 到 TypeScript 定义文件

    我已经找到了ts2kt 库 https github com Kotlin ts2kt这将从任意位置创建 Kotlin 头文件 d ts文件 但是 我想朝相反的方向走 我想构建一个可以编译为 JavaScript 的 Kotlin 库 但我
  • 在Android中绘制圆角矩形

    我已经发现这个问题 https stackoverflow com questions 5618402 how to draw rounded rectangle in android ui解决方案是这段代码
  • Jetpack 中的波浪框组成

    有没有办法用Canvas制作一个顶部有波浪形的盒子 我想知道这个效果是否可以直接用Canvas来实现 不需要有滚动动画 不太清楚你为什么在谈论Canvas 要裁剪这样的视图 您可以使用自定义Shape并将其应用到您的视图中Modifier

随机推荐

  • 编写 xml 并读回 c#

    好的 我现在使用文档方法而不是 XmlWriter 来编写 XML 我已经用 编写了我的 XML 文件 userNode xmlDoc CreateElement user attribute xmlDoc CreateAttribute
  • Rails + Android 中的 Authenticity_token

    我正在开发一个与 Rails 服务器通信的 Android 应用程序 我不想忽略authenticity token 但我也不认为询问它是正确的答案 如何保护我的 POST 请求 当您使用 API 时 像 Android 应用程序那样需要真
  • 计算 R 中具有不同权重的组的一系列加权平均值

    我有以下数据集 实际数据的简单版本 data 并且想分别使用权重 w1 和 w2 计算变量 x1 和 x2 的加权平均值 分为两组 由变量 n 确定的组 data lt data frame n c 1 1 1 2 2 2 x1 c 4 5
  • 合并重复行

    我有一个数据框 其中一列是物种名称 第二列是丰度值 由于采样程序的原因 某些物种出现多次 即 其中有不止一排物种 X 我想合并这些条目并总结它们的丰富性 例如 给定这个数据框 set seed 6 df data frame x c sp1
  • Python 回文程序无法运行

    我用 python 编写了一个简单的程序 它检查句子是否是回文 但我不明白为什么它不起作用 结果始终为 False 有谁知道出了什么问题吗 def isPalindrome word Removes all spaces and lower
  • PhoneGap Hello World 更改方向

    这很愚蠢 但如果我运行phonegap创建一些App 然后编辑config xml文件
  • 如何只允许在原始 SVG 的范围内平移

    Question 我想限制 SVG 的平移 这样当没有应用缩放时 就不可能进行平移 但是当您放大时 您可以在 SVG 的边界内平移 视觉示例 在下图中 中心的缩放视口可以平移到 SVG 的边缘 但不能进一步平移 然而这与泛示例 http a
  • 更改数组中的现有对象但仍保留键的唯一性

    我有一个文件 profile set name nick options 0 name joe options 2 name burt options 1 如果我想add新对象profile set only if the name对象的尚
  • 终止后启动带有推送通知的应用程序

    我想知道是否有办法唤醒 ios8 9 上已被用户终止的应用程序 我所说的终止是指双击主页按钮并向上滑动 是否可以通过发送静默推送通知来启动应用程序 以便didreceiveremotenotification被解雇并给我一些时间 我注意到我
  • AS3 - 如何让鼠标光标单击按钮?

    在我的应用程序中 我有一个连接到鼠标的鼠标光标 然而 它不允许我单击应用程序中的按钮 这对我来说是一个大问题 因为按钮对于我需要做的事情至关重要 我是 AS 新手 因此我们将不胜感激 stage addEventListener Mouse
  • Maybe 应该用来保存错误消息吗?

    我有一个 Haskell 函数 它接受用户输入 还有另一个函数验证此输入 当然 验证可能会失败 在这种情况下 我想返回一条错误消息 提供有关错误操作的一些反馈 我知道有很多方法可以做到这一点 根据我的一点经验 似乎最好的方法是使用Eithe
  • 如何使用 Sprite Kit 逐步模糊 SKSpriteNode 的图像?

    有人可以提供一个如何使用 Apple 的 Sprite Kit 逐渐模糊 SKSpriteNode 图像的示例吗 例如 假设用户触摸屏幕上的按钮 该按钮将触发背景缓慢 即逐渐 模糊 直到达到特定阈值 理想情况下 我也想反转该过程 例如 允许
  • 如何让php artisan作为后台服务器运行,像Apache一样工作?

    我在 VPS 上设置了一个 Laravel 应用程序 它仅用于演示目的 我将使用 PuTTY ssh 登录到 VPS 并输入 php artisan serve host x x x x 一切正常 但是 当我关闭 PuTTY 连接时 服务器
  • 测量 jpeg 中的空白

    我想测量白色 黄色的 jpeg 数量 在可以调整的容差范围内 我正在尝试开发一种质量控制工具来测量杏仁的缺陷 缺陷是棕色杏仁皮上的划痕 见下图 由于这些缺陷是白色 黄色的 我想要一种简单地将图像加载到 R 中并让它测量白色图像的量的方法 然
  • Firebase signinwithemail&password 不是函数

    我最近一直在为我的 IOS 应用程序制作一个应用程序 并将 firebase 电子邮件 密码身份验证引入到我的项目中 注册部分工作正常 但是当我执行handleSignin 函数时 它并没有按预期工作 任何想法为什么 my code imp
  • 在 Unity 中反射碰撞时的射弹

    当射击射弹时我执行 private Rigidbody rigid private Vector3 currentMovementDirection private void FixedUpdate rigid velocity curre
  • 使用 Spring LdapTemplate 从 Active Directory 获取所有属性

    我有一个 Spring Boot 应用程序 它使用 LDAP 来对用户进行身份验证 对于用户 我正在映射 AD 中的属性并填充用户的名字 姓氏 部门 电子邮件 电话以及图像等值 但是 我无法从属性中获取员工编号 当我使用该工具检查属性时活动
  • 如何融合CMMI和Scrum? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在一家获得 CMMI 5 级认证的商店工作 该认证很重要 因为它使我们能够接触到某些客户和合同 我正在研究如何将 Scrum 与 CMMI 结合起来
  • Apple 推送通知和表情符号字符

    我最近发现这篇关于 APNS 和 Emoji 字符的非常有趣的文章 EASY APNS 只是为了好玩 http www easyapns com category just for fun 它包含一个包含所有支持的表情符号的列表 但是 我无
  • Kotlin - 了解 Getter 和 Setter

    Kotlin 自动生成它的 getter 和设置 但我从不引用它们 另外 在 Kotlin 中编写自定义 getter setter 的正确方法是什么 当我说myObj myVar 99我感到myVar是一个公共领域myObj我直接访问 这