方式一

  1. private var tvTitle:TextView?=null
  • 不推荐,每次需要 ?. 访问

    方式二

    class MainActivity : AppCompatActivity() {
      private lateinit var tvTitle: TextView
    
      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          setContentView(R.layout.activity_main)
          //tvTitle=findViewById(R.id.tv_title)
          tvTitle.text="hello"
      }
    }
    
  • 不推荐,编译器忽略了其初始化校验,存在空指针异常。

方式三

    private  val tvTitle  by lazy {
        findViewById<TextView>(R.id.tv_title)
    }
  • 推荐,lazy 只有在第一次访问才初始化
  • lateinit 只用于变量 var,而 lazy 只用于常量 val