Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何访问traits的默认类实现_Scala - Fatal编程技术网

Scala 如何访问traits的默认类实现

Scala 如何访问traits的默认类实现,scala,Scala,在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

在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
是类的一个实例


但是
res1
res2
呢?没有具体的
Set
Map
类,只有trait,trait不能实例化。它们的类别是什么?

在这些情况下,
Set
Map
分别是
res1
res2
的声明类型。要获取实际类型,请尝试以下操作:

现在您将看到它们不仅仅是traits
scala.collection.immutable.Set
scala.collection.immutable.Map
的实例;它们是实现这些特性的具体类的实例


如果您想进一步了解这些类是如何创建的,可以查看和的源代码。

在这些情况下,
Set
Map
分别是
res1
res2
的声明类型。要获取实际类型,请尝试以下操作:

现在您将看到它们不仅仅是traits
scala.collection.immutable.Set
scala.collection.immutable.Map
的实例;它们是实现这些特性的具体类的实例


如果您想了解这些类是如何创建的,您可以查看和的源代码。

同样适用于
List
:它是一个抽象类,因此不能直接实例化。同样适用于
List
:它是一个抽象类,因此不能直接实例化。
Set(1, 2, 3).getClass.getCanonicalName
Map(1 -> "a", 2 -> "b").getClass.getCanonicalName