在 Kotlin 中访问同一类的不同实例的字段

沃伊泰克

考虑这个 Kotlin 代码:

var parent: T? = null
    get() = if (isParent) this as T else field
    set(value) { field = if (value == null) null else value.parent }

val isParent: Boolean
    get() = parent == null

var description = ""
    get() = if (isParent) field else parent!!.description
    set(value) { if (isParent) field = value else parent!!.description = value }

假设如果此实例是一个实例,则isParent返回如果不是,将返回父实例。在 Java 中,您可以直接访问同一类的不同实例的字段,如下所示:trueparentgetParent()

String getDescription() { return getParent().description; }
void setDescription(String value) { getParent().description = value; }

(我并不是说这是最好的做法,我将其简化以进行演示)。与 Java 相比,能够执行以下操作会很好:

var description = ""
    get() = parent.field
    set(value) { parent.field = value }

然而,这不起作用,不幸的是它使代码的可读性降低。特别是如果你有很多这样的变量,它们绑定到 this parent

约尔

属性的支持字段只能从该属性的 getter 或 setter 访问,并且只能用于调用 getter 或 setter 的实例。如果需要提供多种方法来访问类的属性,则需要定义两个不同的属性,其中一个具有用于存储数据的支持字段,另一个具有引用第一个属性的 getter 和 setter。

class Foo {
    var parent: Foo? = null

    val parentOrSelf: Foo get() = parent ?: this

    private var _description: String? = null

    var description = ""
         get() = parentOrSelf._description
         set(value) { parentOrSelf._description = value }
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Kotlin-非单一类的单个实例?

来自分类Dev

我有两个针对同一类的Kotlin扩展方法,但是具有不同的通用签名,并且编译器抱怨

来自分类Dev

无法访问在同一类中声明的类实例

来自分类Dev

合并同一类的不同实例

来自分类Dev

在类中调用同一类的实例

来自分类Dev

使用Typescript访问同一类中的私有静态字段

来自分类Dev

使用Typescript访问同一类中的私有静态字段

来自分类Dev

Kotlin类实例assertEqual

来自分类Dev

创建类kotlin的实例

来自分类Dev

Kotlin类实例assertEqual

来自分类Dev

从不同文件中的同一类访问函数

来自分类常见问题

在Kotlin中创建一个抽象类的实例

来自分类Dev

从同一类的实例中检索属性及其描述

来自分类Dev

对同一类中的多个字段使用@Id

来自分类Dev

无法访问同一类中的属性

来自分类Dev

无法访问同一类中的变量

来自分类Dev

Tornado:路线中同一类的不同方法

来自分类Dev

Kotlin中的扩展字段

来自分类Dev

Kotlin中的类声明

来自分类Dev

Kotlin类中“ this”的目的

来自分类Dev

如何读取由同一类内的访问器设置的实例变量?

来自分类Dev

无法访问同一类的方法内部的实例变量?

来自分类Dev

为什么同一类的两个实例具有不同的属性(Python)明智?

来自分类Dev

如何使用同一类 intest 的 2 个不同实例?

来自分类Dev

是否可以在同一类中创建一个类的实例?

来自分类Dev

为什么我不能在类定义中实例化同一类的对象

来自分类Dev

当我们在同一类中创建类的实例时会发生什么?

来自分类Dev

Kotlin 中的函数是实例吗?

来自分类Dev

如何从同一类中的静态方法访问类中的python方法

Related 相关文章

热门标签

归档