3dayboy

技術備忘録

Kotlin で .properties ファイルを1行でロードする

Kotlin を使って .properties ファイルを1行でロードしてみます。

結論

import java.io.File
import java.util.Properties

fun main() {
    val properties = Properties().apply { File(".properties").inputStream().use(this::load) }
}

解説

こちらの記事 https://qiita.com/Toshimichi/items/03ca398d7717405de695 の余談にある、3行で .propertiesを ロードするコードが原型となっています。

val properties = Properties()
val file = File(".properties")
file.inputStream().use(properties::load)

このfileという変数は、.properties をロードした後は使わないその場限りのものです。 こういう時、スコープ関数が役に立ちそうです。

スコープ関数を使って file 変数を中に閉じ込める

val properties = Properties().apply {
    val file = File(".properties")
    file.inputStream().use(this::load)
}

この apply 関数 がスコープ関数 (の一種) です。 apply 関数では、引数のクロージャ内で this を用いてレシーバを操作することができます。 返り値はそのままレシーバになるので、宣言と同時に初期操作したい場合や、初期化のための余計な変数を散らかしたくない場合に役立ちます。 スコープ関数については、 Kotlin スコープ関数 用途まとめ - Qiita が非常に分かりやすいです。

あとは、諸々整形して1行になります。