【发布时间】:2018-08-11 01:57:05
【问题描述】:
在 Kotlin 中,open 与 Java 中的 final 中的类和方法相同。
对于标记为open 的字段,open 在以下课程中为我提供了什么?
@MappedSuperclass
abstract class BaseEntity() : Persistable<Long> {
open var id: Long? = null
}
更新 这不是 What is the difference between 'open' and 'public' in Kotlin? 的重复项
我对属性的 open 关键字感兴趣
更新
open 类可以被继承。open fun 可以被覆盖val 属性是final java 中的字段
open 属性呢?
【问题讨论】:
-
@s1m0nw1 它不重复我很好奇
open字段关键字 -
只是一个观察 - 我对 Kotlin 一无所知,所以我投弃权票。但是,如果您可以提供一个 Minimal, Complete, and Verifiable example 来展示它与属性的用法(不要只是在原始问题中添加“更新”,而是将 whole 问题更改为专门关于开放与非开放属性的问题),这个可能会被重新打开,因为另一个问题似乎没有解决它。请务必在问题中保留“这不是欺骗”文本和链接。
-
字段的 open 关键字允许稍后更改字段的可见性/内容,但仍保持相同的名称:
open class Container { protected open val fieldA: String = "Some value" } class DerivedContainer : Container() { public override val fieldA: String = "Something else" } -
这个问题与 open 和 public 的区别有何重复?
-
我觉得在这里提一下很重要,Kotlin 中没有“字段”这样的东西。 Kotlin 具有属性。这是 val 的 getter 方法和类中定义的 var 的 getter 和 setter 方法。即使他们在后台有一个支持字段,我们也不应该为此烦恼。既然提到了这一点,properties 的“open”关键字应该更有意义,因为它只是说明生成的 get/set 方法不是最终的,而是开放的以供覆盖。