2017-12-30 46 views
3

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のコレクションファクトリに似たコレクションファクトリの統一規約に従わないことを選択したのですか?

+2

私たちは、均等に周りの見出しの質問になるかもしれない - なぜ* Kotlinがリストを持っている必要があります*(...)の作成方法? 「制服」は何を意味しますか? listOf、mutableListOfなど複数の作成メソッドがあることにも注意してください。 –

+0

別の投稿からの[answer](https://stackoverflow.com/a/34752211/8343333)は、それが良い習慣ではない理由を説明していますクラスのものと同じファクトリ関数名。インタフェースや抽象クラスの場合、クラス、インタフェース、抽象クラスのファクトリ関数の一貫した命名スタイルを持つ方がよい。 – BakaWaii

+2

@BakaWaii質問として、Kotlinライブラリに同じ名前のファクトリ関数があります。 –

答えて

12

Kotlinコレクションライブラリの設計者は、収集工場

の統一規則に従わないことを選択しなかった理由「制服大会」があります:Kotlin標準ライブラリ関数listOfを使用して、arrayOfmapOfなどは、 docs

Kotlinには、リストまたはセットを作成するための専用構文構文がありません。このようlistOf()mutableListOf()setOf()mutableSetOf()

などの標準ライブラリから使用方法、Scalaのアプローチは、実際に任意のより良いだろう、なぜ私はよく分かりません。とにかく、これらのコンストラクタのような機能を持っているしたい場合は、それは大したことは、それらを作成することはありません。

fun <T> List<T>(vararg e: T) = listOf(e) 

//use it 
val l = List(1, 2, 3, 4) 
関連する問題