2017-10-15 9 views
1

Scalaでは、いくつかのクラス(または特質、明らかに)のコンパニオンオブジェクトのapplyメソッドを呼び出すことによってオブジェクトを作成することができます。例えば:そこに特質のデフォルトのクラス実装にアクセスする方法

List(1, 2, 3) 
res0: List[Int] = List(1, 2, 3) 

Set(1, 2, 3) 
res1: scala.collection.immutable.Set[Int] = Set(1, 2, 3) 

Map(1 -> "a", 2 -> "b") 
res2: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b) 

res0クラスListのインスタンスです。

res1res2はどうなりますか?具体的なSetまたはMapのクラスはなく、特性だけがあり、形質はインスタンス化できません。彼らのクラスは何ですか?

+1

同じことが 'List'に当てはまります:それは抽象クラスであり、したがって直接インスタンス化することはできません。 –

答えて

4

これらのケースでは、SetMapはそれぞれres1res2の宣言された型です。今、あなたは、彼らが特徴scala.collection.immutable.Setscala.collection.immutable.Mapだけのインスタンスではないことがわかります

Set(1, 2, 3).getClass.getCanonicalName 
Map(1 -> "a", 2 -> "b").getClass.getCanonicalName 

;:実際のタイプを取得するには、これを試してくださいそれらはその特性を実装する具体的なクラスのインスタンスです。

これらのクラスの作成方法の詳細については、SetMapのソースコードを参照してください。

関連する問題