8

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" }

これを避けるべきか、奨励すべきか、またその理由は?

4

2 に答える 2

-2

+ホットキーに同意します。この場合、混乱を避けるのがおそらく最善です。

ただし、それが内部でのみ使用され、他のすべての開発者 (存在する場合) がそれで問題ない場合は、それを使用することをお勧めします。Python はその考えを認めており、私はそれを気に入っています。関数のように振る舞うように感じられる場合は、関数のケースでクラスに名前を付けても問題ありません。ただし、Python は Java 相互運用性を扱う必要がないため、公開コードに対しては絶対に行わないでください。

于 2016-01-13T12:14:21.057 に答える