我们可以定义我们的访问器没有init值吗?

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

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的支持属性,所以我们可以定制访问者,也可以不要初始化这个字段。

One Solution collect form web for “我们可以定义我们的访问器没有init值吗?”

如果你声明一个带有后台的属性,你需要初始化它。 如果你不想初始化它,你可以声明自定义的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编译与泛型和自动类型转换有关的错误
  • 测试包不读取主包中定义的Kotlin类
  • 为什么unregisterReceiver()永远不会调用onServiceDisconnected?
  • 直接解析配置“debugCompile”是不允许的
  • 对象构造函数和Delegates.notNull
  • Kotlin不适用于Android Studio
  • Kotlin的Styleguide设置
  • 使用Kotlin将序列分散到三个列表的习惯性方法
  • Kotlin:阻塞具有非阻塞I / O的协程
  • Android Kotlin Realm正确的方法来查询+更新异步
  • 有没有一种方法可以在Kotlin中使用初始化函数构造一个HashSet?
  • Kotlin language will be the best programming language for Android.