kotlinは便利だけど、便利故に勝手に期待をする -> やっぱりできなかった。 -> どうやるの?
と、深く考えることなしにハマってしまう。
そんな私の備忘録。
コンストラクタ
下記のクラスにセカンダリを追加する場合、list: ArrayList<Any>
はデリゲートができない。
class Hoge(var list: List<Any>)
結局、プライマリ+α な引数にするという形をとることにした。
class Hoge(val list: List<Any>) {
constructor(foo:String, bar: ArrayList<Any>) : this(bar) {
// barzもデリゲートできない
val barz = ArrayList<Any>()
// ちなみにセカンダリの引数は自動的にval相当になる(var, valの指定不可)
// 下記はエラー
foo = ""
}
}
考えてみたら当たり前のことで異なるコンストラクタの引数を参照できるわけがない。
when
break, continueが使えないので迷った。
- returnするとメソッドを抜けてしまう。
- loopは使えたとしても極力使いたくない。
when句からのexitは空の中括弧で対応した。
val hoge:String = foo
when (hoge) {
null -> return
"" -> {}
"a" -> {return} //nullと同じ挙動
else -> {
print(hoge)
}
}
Properties
IntelliJではresources配下に対して以下のようにしてアクセスができた。
~/resources
/dev
/example.properties
/prod
/example.properties
val prop = Properties()
val env = "dev"
prop.load(this::class.java.getResource("/${env}/example.properties").openStream())
参照
https://stackoverflow.com/questions/42739807/how-to-read-a-text-file-from-resources-in-kotlin
Paths
作業ディレクトリの取得方法
Paths.get("").toAbsolutePath().toString()
SLF4J
val logger = LoggerFactory.getLogger(this::class.java)