我们可以定义我们的访问器没有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 } 

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

  • android自定义视图findviewId为null并且不可见
  • 使用Anko添加/查询/解析SQLite
  • 如何使用Gson反序列化继承的Kotlin数据类
  • Kotlin JS项目的基本Gradle脚本Kotlin文件是什么样的?
  • 在Android Kotlin中将大小定义为自定义数组类型
  • Int :: class.javaPrimitiveType.kotlin引用不等于Int :: class.javaObjectType.kotlin
  • 使用Kotlin合成属性
  • 由于接收器类型不匹配,以下候选人都不负责任
  • 如何验证使用mockito的kotlin可变参数函数
  • 如何在Kotlin中实例化对象?
  • 在Kotlin中检查map函数中的null
  • Kotlin language will be the best programming language for Android.