読者です 読者をやめる 読者になる 読者になる

a fledgling

駆け出しが駆け出してみる

Kotlin+SpringBootでWebアプリを作ってみる その1.1

lateinit

昨日、Kotlin+SpringBootでWebアプリを作ってみる その1を投稿してから30分くらいでこんなツイートが。

やんくさんや… てか早い。

ということでlateinitで書き換えてみる。

Book.kt

package book.application.domain

import javax.persistence.*

/**
 * bookテーブルのEntity.
 */
@Entity
@Table(name = "book")
class Book() {
    @Id @GeneratedValue
    var id: Long? = null
        private set

    @Column(nullable = false)
    lateinit var title: String
        private set

    @Column
    var subTitle: String? = null
        private set

    @Column(nullable = false)
    lateinit var leadingSentence: String
        private set

    @Column(nullable = false)
    lateinit var imagePath: String
        private set

    @Column(nullable = false)
    lateinit var url: String
        private set

    /**
     * セカンダリコンストラクタ
     * @param id 主キー
     * @param title 書籍名
     * @param subTitle 書籍の副題 ない場合はnull
     * @param leadingSentence リード文
     * @param url リンク先URLパス
     */
    constructor(id: Long? = null, title: String, subTitle: String? = null, leadingSentence: String, imagePath: String, url: String) : this(){
        this.id = id
        this.title = title
        this.subTitle = subTitle
        this.leadingSentence = leadingSentence
        this.imagePath = imagePath
        this.url = url
    }
}

んー、こうかな?
プリミティブ型、nullablelateinitできないから普通にプロパティを書いた。
こっちの方がgetter, setterのアクセス制御ができるのでいいですね。カスタムは持てないようですが。

所感

上記のコードでは、idsubTitleのプロパティ定義が微妙な感じがしますが、lateinitを使う方が良さそうな感じです。
微妙なところはもっと勉強しないと。

それにしても、稚拙でも書いて公開してみるものですね。
まさかフォローしてる方に読んでもらえて軽くコメントしてもらえるとは...!

P.S

4/2(土)Kotlin 1.0リリース勉強会 in 京都 に参加します。
Kotlin初心者なりに学んだこと、感じたことを書こうと思っています。