Scalaでは、コンパニオンオブジェクトのapply
メソッドを使用して、コンパニオンオブジェクトを通じてコレクションファクトリメソッドを提供する便利な方法があります。ですから、1、2、3の要素を持つリストを作成する場合は、List(1, 2, 3)
を使用します。このパターンは、すべてのコレクションタイプで一貫しています。なぜKotlinは `List(...)`をリストのファクトリとして使用し、すべての抽象コレクションについて同様の規約を使用しないのですか?
コトルでは、私がList(1, 2, 3)
と書くと、コンパイルエラーが発生します。 1、2、3のリストを作成するには、listOf(1, 2, 3)
を使用する必要があります。 List
はインタフェースなので、明らかにコンストラクタはありません。コンパニオンオブジェクトが存在する可能性がありますが、オブジェクトはありません。 List
関数がありますが、Scala(public inline fun <T> List(size: Int, init: (index: Int) -> T): List<T>
)からの予想とは異なる署名があります。
なぜ、Kotlinコレクションライブラリの設計者は、Scalaのコレクションファクトリに似たコレクションファクトリの統一規約に従わないことを選択したのですか?
私たちは、均等に周りの見出しの質問になるかもしれない - なぜ* Kotlinがリストを持っている必要があります*(...)の作成方法? 「制服」は何を意味しますか? listOf、mutableListOfなど複数の作成メソッドがあることにも注意してください。 –
別の投稿からの[answer](https://stackoverflow.com/a/34752211/8343333)は、それが良い習慣ではない理由を説明していますクラスのものと同じファクトリ関数名。インタフェースや抽象クラスの場合、クラス、インタフェース、抽象クラスのファクトリ関数の一貫した命名スタイルを持つ方がよい。 – BakaWaii
@BakaWaii質問として、Kotlinライブラリに同じ名前のファクトリ関数があります。 –