我试图创建一个接口,强制其派生类具有特定属性,但只能使用公共getter.因为我不想允许从它的私有范围之外进行更改,所以我不想让它实现一个公共集.

interface Transaction{
   var transferDate: Date get //I only require a get, no set
}

class MoneyTransaction(){
   override var transferDate: Date get private set 
/*private set does not work*/
}

推荐答案

A property is an accessor to some data. You'll have a getter and if the property is mutable a setter as well. Therefore you can override any declared val property with a var property:

interface Transaction {
   val transferDate: Date
}

class MoneyTransaction: Transaction {
   override lateinit var transferDate: Date
       private set 
}

Note that you don't need to make the property a lateinit var if you initialize it with the object; I just added it to have your example compile properly.

Kotlin相关问答推荐

如何在Kotlin中模拟www.example.com()?

文本正在被切断在200%的屏幕比例在Jetpack Compose

Kotlin中的增广赋值语句中的难以理解的错误

Gradle Jooq配置自定义生成器

如何让Gradle8+在编译Kotlin代码之前编译Groovy代码?然后把它们混合在一个项目中?

如何在Docker中使用Selenium和chromedriver?

为何Kotlin标准库中的AND和OR函数不能像&&和||一样进行短路运算?

在 Kotlin 中将两个字节转换为 UIn16

kotlin 模式匹配如何像 scala 一样工作

Kotlin 中的密封和内部有什么区别?

从 HashMap 检索时的 NPE,即使 containsKey() 在多线程环境中返回 true

kotest 更改环境变量

SpringBoot 2.5.0 对于 Jackson Kotlin 类的支持,请在类路径中添加com.fasterxml.jackson.module: jackson-module-kotlin

在 Kotlin 中,当枚举类实现接口时,如何解决继承的声明冲突?

封闭 lambda 的隐式参数被shadowed

从片段(fragment)中的点击事件启动协同程序

如何获取Kotlin中变量的名称?

安装 Kotlin-Jupyter:e: java.lang.NoClassDefFoundError: 无法初始化类 org.jetbrains.kotlin.com.intellij.pom.java.LanguageLevel

将字符串编码为Kotlin中的UTF-8

Kotlin:测试中的 java.lang.NoSuchMethodError