kotlin - 我们可以定义没有初始值的访问器吗?

标签 kotlin

我想为字段定义自己的访问器,如下所示:

var item: Item
    get() {...}
    set(value) {...}

由于项目未初始化,我收到错误。我无法添加 Lateinit,因为我定义了 get 和 set 方法。

我可以选择的是声明另一个可为空的字段,并使用该字段来实现项目访问器,这太愚蠢和多余了。

所以我想一定还有其他方法来实现这个要求......


更新:

谢谢你的回复。 我想我没有表达清楚。在我多次阅读该文档后,我认为答案是否定的。

我的要求是:是否有更简单的替代方法来声明这一点?

private var _table: Map<String, Int>? = null
public val table: Map<String, Int>
    get() {
      if (_table == null)
        _table = HashMap() // Type parameters are inferred
      return _table ?: throw AssertionError("Set to null by another thread")
    }

我们必须声明一个 nullabe 支持属性,以便我们可以自定义访问器并使字段保持未初始化。

最佳答案

如果您声明带有支持字段的属性,则需要对其进行初始化。如果您不想初始化它,您可以声明自定义 getter 和 setter。

var item: String
    get() = "my String"
    set(value) {
        log(value)
        //do something with value
    }

如果没有用于初始化属性的值,请将其声明为可为空并使用 null 进行初始化

var item: String? = null
    get() = field
    set(value) {
        field = value
        //do something with value
    }

如果这不符合您的要求,请更新问题以进行澄清。

关于kotlin - 我们可以定义没有初始值的访问器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670692/

相关文章:

android - 类没有实现抽象基类成员 public abstract fun create(p0 : Context? , p1 : Int, p2 : Any? ): PlatformView

android - 关于 settings.gradle.ktl 的 Kotlin DSL 未解析引用

android - 在EditText后隐藏提示不为null

spring-boot - Kotlin & jackson : type error when specifying custom serialisation for a data class field

android - SecurityException: getSerial: 用户 10134 不满足访问设备标识符的要求

android - 发送 2 个对象模型作为 @body 改造的输入

Android Studio 无法访问 ADB 服务器

kotlin - 如何通过 gradle 任务执行具有依赖注入(inject)的特定类方法?

android - 单击 onCLickListener 按钮调用另一个模块

android - Android Kotlin 项目中的 Dagger Hilt 和 KSP 问题 : Cannot Resolve Symbol ‘Inject’