〈kotlin〉文法メモ:lateinit
kotlinでは全ての変数をあらかじめ初期化しておかなければならない。
変数を定義した段階でまだ値を用意できていないという場合は、
lateinitを使うことで初期化を遅らせることができる。
class LoginFragment : Fragment() { private lateinit var usernameEditText: EditText private lateinit var passwordEditText: EditText private lateinit var loginButton: Button private lateinit var statusTextView: TextView override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) usernameEditText = view.findViewById(R.id.username_edit_text) passwordEditText = view.findViewById(R.id.password_edit_text) loginButton = view.findViewById(R.id.login_button) statusTextView = view.findViewById(R.id.status_text_view) } ... }
https://developer.android.com/kotlin/common-patterns?hl=jaより引用。
lateinitをつけて宣言した後、onViewCreate内で値を割り当てている。
もし、lateinitを使わずに変数を定義しておくなら、
型名に?をつけてnull許容型としnullを代入しておく方法もある。
ただしこの場合、変数を参照する全てのタイミングで(変数 != null)を書いてnullチェックする必要がある。
lateinitとしておけば、初期化をせず非null型の変数として定義しておける。
その変数を参照する前までに値を代入すれば良い。
もし初期化する前に参照してしまうと、UninitializedPropertyAccessExceptionが出るので注意。