Property must be initialized or be abstract

と(イニシャライズしなさいよ、的なことで)注意された時の直し方です。

以前、MediaPlayerの再生や、今回のカウントダウンタイマーのところでも、ちょくちょく出てくる

lateinit

について、ざっくり解説(※てか、カウントダウンタイマー後編の動画の抜粋)

テキスト

Property must be initialized or be abstract

と注意された時の直し方です。

まず、そもそも論ですが、変数を使うためには
宣言で名前をつけて、それに中身を入れるまでがセットです(=初期化)。

だから、startTimeって名前を付けた時には、中身に10000って数字を入れることで成立してますし
tvって名前をつけたときには、idのtvを取得して入れてあげる、代入することで
tvが使えるようになるわけです。

宣言っていうのは「名前をつけて、中身を入れる」これが1セット。
これが大前提ですよってのを覚えておいてください。

今の話を踏まえたうえで、timerを見てみましょう。
timerって名前は付けてるんだけど、「=」で、その先の中身をまだ何も入れてないんですよね。

実際の中身はこの中(8番)だったりするんですが、
今じゃないと。
今は名前だけつけて、中身はあとからonCreateの中で書いていくので

今は名前だけ、中身は後から、っていう時に書くのがlateinitです。
だから、 init 初期化を、late 遅らせる、っていう文言が付いています。

まとめておくと、
初期化は、名前を付けて、イコールで中身を入れるまでが1セット。
ただし、今は中身がないので、後でね、っていうのがlateinit。

    コメントを残す