Kotlinの@JvmOverloadsをプライマリコンストラクタに書く方法

小ネタ。

Kotlinで、プライマリコンストラクタに @JvmOverloads アノテーションを付ける方法を知らないメンバーがいたのでメモ。

状況

多いのは以下のような data class

data class DataClass(...)

と書かれている場合、 @JvmOverloadsconstructor にしか付与できないため、このままでは記述できない。

対応

class DataClass(...)class DataClass constructor(...) の省略形なので、以下のように constructor を明示し、それにアノテーションを付与してやればいい。

data class DataClass @JvmOverloads constructor(...)

振り返り

3か月くらいKotlinとJavaが混じった環境でコードを書いているが、Javaとの相互運用を考えると、Kotlinオンリーの環境でなければ @JvmOverloads はコンストラクタには必須にしておくほうがよさそう。