考虑这个 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 中,您可以直接访问同一类的不同实例的字段,如下所示:true
parent
getParent()
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] 删除。
我来说两句