以下以
TextView
为例
我们一般init
(初始化一个元件):
private var textView: TextView? = null
此方式在後续使用到textView
的程序码都要加上?
才能使用
/
或是使用lateinit
的话(参数延迟初始化):
private lateinit var textView: TextView
假设任何情况下,在後面程序码没有将textView
成功初始化的话,
就会crash报错:lateinit property tv has not been initialized
使用时机:宣告变数
第一次使用时才会执行内部程序码,
且只有在会用到他时才会产生该值。
使用lazy
,可以直接在内部宣告其初始状态。
private val tv: TextView by lazy {
findViewById(R.id.textView)
}
class MainActivity : AppCompatActivity() {
private val tv: TextView by lazy {
findViewById(R.id.textView)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tv.text = "hello world"
}
}
lazy只会在第一次使用时会被呼叫执行,
所以假设注解了
// tv.text = "hello world"
则tv
这个值就不会被产生
比起
init
、lateinit
,
lazy
更为方便且安全,
也能更有效地节省空间。
目前宣告各式各样的变数,基本上都用lazy,
觉得很方便所以分享一下。
第一次写文章,各方面都有些别扭,不好意思了。
参考资源:
>>: [Day4]C# 鸡础观念- 核心的数据成员~变数(二)
我们前三天已经完成建构一个完整APP的90%了,而我们今天要解决的问题是,要怎麽让我们的Django...
音乐是游戏不可或缺的一部分,据说只要加上音乐,游戏就完成一半了! UNITY添加音乐之前,必须先给游...
昨天写的小网站後续看文章时觉得有一部分JS有硬干的嫌疑(?) 所以把一些部分做了改动 首先使用了HT...
Container Registry 今天说一下如何在GCP上建立Docker Image私仓(Do...
对于 Powershell 脚本的参数,我们可以通过一些属性来限制参数。 今天我们就来看看,怎么通过...