Kotlin では、既存のクラスと同じ関数に名前を付けることができます。たとえばHashSet
、初期化関数を使用すると、次のように実装できます。
fun <T> HashSet(n : Int, fn: (Int) -> T) = HashSet<T>(n).apply {
repeat(n) {
add(fn(it))
}
}
HashSet
使用すると、通常のコンストラクターのように見えます。
var real = HashSet<String>()
var fake = HashSet(5) { "Element $it" }
これを避けるべきか、奨励すべきか、またその理由は?