NANOSMICROSMILLISSECONDSHOURSHALF_DAYSDAYS月と年の計算は曖昧な部分(うるう年とか)があるからサポートできないのだろうか。なんとかすることにした。使ってitemのoffset(bottom)を調整する機会があった。ある位置を基準にしつつ、offsetを調整+スクロールして基準位置にあったitemが同じ位置に見えている必要があったのだが、なぜかズレる。見てみたら見えている一番上のitemの位置が動かず、下にズレているのだ。今見えている一番上のitemを基準にレイアウトが決定されるようだった。仕方がないので基準位置より上にあるViewのoffsetを計算してその分だけスクロールすることにした。答えたしそれより前から最近もずっと思っていたのだが、(DroidKaigiの発表を聞くなどする感じ)どうも違うのではないかと思えてきた。そのため、ここでlateinitの仕様について整理しつつ、そこから導き出される行儀の良い使い方を考察する。小さなオブジェクトが大量に生成されると困るくらいパフォーマンスを気にする部分ではlateinitを使うとよいlateinitとはKotlinでNonNullなプロパティーの初期化をconstructorより後に遅らせられる機能。元々はkaptで(例えば)Dagger2からインスタンスをプロパティーに直接代入できない、みたいなことを解決するアプローチとして追加された。プロパティー定義の前に書く。プリミティブ型にも使えるlazyとの違いlazyは値をsetできない(1回限りの遅延初期化)lazyはNullableでも使える最後に意外とlateinitもっとカジュアルに使ってもいいのかもしれない。