Kotlin 中的 Getter 和 Setter

2023-11-26

例如,在 Java 中,我可以自己编写 getter(由 IDE 生成)或使用像 lombok 中的 @Getter 这样的注释 - 这非常简单。

然而 Kotlin 有默认情况下的 getter 和 setter。 但我不明白如何使用它们。

我想让它,比方说 - 类似于 Java:

private val isEmpty: String
        get() = this.toString() //making this thing public rises an error: Getter visibility must be the same as property visibility.

那么吸气剂是如何工作的呢?


Getter 和 Setter 在 Kotlin 中自动生成。如果你写:

val isEmpty: Boolean

它等价于下面的Java代码:

private final Boolean isEmpty;

public Boolean isEmpty() {
    return isEmpty;
}

在您的情况下,私有访问修饰符是多余的 - isEmpty 默认情况下是私有的,只能由 getter 访问。当您尝试获取对象的 isEmpty 属性时,您实际上调用了 get 方法。为了更多地了解 Kotlin 中的 getter/setter:下面的两个代码示例是相同的:

var someProperty: String = "defaultValue"

and

var someProperty: String = "defaultValue"
    get() = field
    set(value) { field = value }

我还想指出的是thisgetter 中的 不是您的财产 - 它是类实例。如果您想在 getter 或 setter 中访问字段的值,您可以使用保留字field for it:

val isEmpty: Boolean
  get() = field

如果您只想在公共访问中拥有一个 get 方法 - 您可以编写以下代码:

var isEmpty: Boolean
    private set 

由于 set 访问器附近的 private 修饰符,您只能在对象内部的方法中设置此值。

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

Kotlin 中的 Getter 和 Setter 的相关文章

  • 在粘贴时将 java 转换为 kotlin

    所以我检查了 下次不再显示此对话框 但事实证明它永远不会再次转换代码 我应该在哪里再次删除复选标记 以便在粘贴时可以返回将 java 代码转换为 kotlin 提前致谢 https developer android com kotlin
  • 错误:类 kotlin.reflect.jvm.internal.FunctionCaller$FieldSetter

    我已尝试一切方法来消除此错误 但它不断出现 Class kotlin reflect jvm internal FunctionCaller FieldSetter can not access a member of class com
  • Kotlin 中 with 和 run 的区别

    Do with and run具有相同的功能 只是语法不同 或者之间是否存在重大差异with and run 哪个是正确的方法 adapter run notifyDataSetChanged if activityDetails isEm
  • 为什么我无法使用 HttpUrlConnection 上传第一个文件块?

    在我的项目中 我应该从一台服务器逐块下载文件 并将每个块立即上传到另一台服务器 我有一个应该下载的文件的 URL 我们就这样称呼它吧downloadUrl 因此 这就是我逐块下载文件的方式 val chunkSize 1024 1024 B
  • Kotlin Android Studio - Var 在 SDK 29 中被视为 val

    我在 Kotlin 中遇到了一件非常奇怪的事情 我有 var myClipboard getSystemService CLIPBOARD SERVICE as ClipboardManager var myClip ClipData Cl
  • 如何处理多个 NavHosts/NavControllers?

    我在处理多个 NavHost 时遇到问题 这个问题与提问者非常相似here https stackoverflow com questions 56637482 how to use navcontroller with a navhost
  • 将应用程序传递给 AndroidViewModel

    我想用Android视图模型 https developer android com reference android arch lifecycle AndroidViewModel html对于我的视图模型 以便访问Context 这个
  • Kotlin:数据类私有 setter 公共 getter

    有什么方法可以在 Kotlin 数据类中创建私有 setter 和公共 getter 吗 data class Test var attribute String attribute can be mutated inside this c
  • Kotlin 合约不适用于扩展函数中的空检查

    我正在尝试编写一个返回的扩展函数true如果该值不是null或 0 并使用合约向编译器保证如果我返回true 该值非空 但是 它似乎不适用于智能投射 当我尝试将值传递给采用不可空值的函数时 它仍然无法编译Long 我尝试编译这段代码 但它不
  • Kotlin 协程异步延迟

    我正在研究 Kotlin Android 中的协程概念 因此 由于我不想使用 Timertask 延迟后的处理程序 所以我想使用协程在一定延迟后执行异步协程 我有以下半代码 launch UI val result async Common
  • 系统导航栏在某些场景下应用深色效果

    我正在尝试应用边到边效果与撰写材料3 但是系统导航栏在某些设备中颜色变得更深 可组合主题 Composable fun AppTheme systemUiController SystemUiController rememberSyste
  • 无法解析以下类的超类型

    I have android app in kotlin这给了我这个错误 错误 无法解析以下类的超类型 请确保类路径中具有所需的依赖项 com google firebase auth FirebaseAuth 类 未解析的超类型 com
  • 尝试解解析 json 字符串,但得到 Expected start of the object '{', but had 'EOF' 相反

    我正在尝试使用 kotlin 可序列化将 json 文件解析为列表 这是我的数据类 Serializable data class Book val epub String val fb2 String val mobi String va
  • Firestore:发现名称 isText 的 getter 冲突

    我试图查看类似的问题 但它们对我来说没有用 我有一堂课 data class TextMessage val text String override val time Date override val senderId String o
  • Kotlin 中 Float 和 Double 类型的最小值和最大值

    找出确切的内容很简单min and max值Int and LongKotlin 中的整数 有符号 32 位整数 Int MIN VALUE 2147483648 Int MAX VALUE 2147483647 有符号 64 位整数 Lo
  • 有什么区别!!和 ?在科特林?

    我是科特林新手 我想知道这两者之间的区别 and 在下面的代码中 下面有两个片段 第一个使用 for mCurrentDataset另一个有 对于同一个变量 if mCurrentDataset load mDataSetString ge
  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • 在 ArrayAdapter 上使用 ViewBinding

    我正在尝试重构我的应用程序以使用ViewBinding 我已经浏览了所有的片段和活动 然而 我有一个ArrayAdapter我不确定使用视图绑定来防止内存泄漏的正确约定 正确的使用方法是什么viewbinding在 ArrayAdapter
  • _ 和 self 之间的区别。在 Objective-C 中

    使用下划线和使用selfObjective C 中调用时的关键字 property 财产申报 property weak nonatomic NSString myString Calling synthesize关于物业 synthesi
  • Kotlin Room 数据库单例模式

    我正在尝试创建单人房间数据库 我找到了两种解决方案 但我不知道它们之间有什么区别 根据这个文件 companion object Volatile private var INSTANCE AppDatabase null fun getI

随机推荐