object Initialization {
def main(args: Array[String]): Unit = {
val list = Traversable(1,2,4,5)
//list.foreach(println)
println( list.getClass.getSimpleName )
}
}
Run Code Online (Sandbox Code Playgroud)
它打印$colon$colon,但我期待类似的东西List.这个不起眼的名字是什么意思?
那是因为List是一个密封的超类,它超过了case类::和对象Nil(参见List文档下的已知子类部分).::发音为cons,以大多数传统函数式编程语言中的list cons运算符命名.
由于您的列表头实际上是::案例类的实例,并且Scala使用名称修改来表示JVM上的非字类名,因此$colon$colon当您使用反射来获取名称时,最终会得到结果.
更新:我不确定您要使用的是什么类名,但您可能可以使用stringPrefix.它被定义为任何扩展GenTraversableLike,几乎每个Scala集合类型.
如果你试图用类名做控制流,你应该尝试其他的东西.模式匹配可以很好地工作,例如:
xs match {
list: List[_] => // do list stuff
set: Set[_] => // do set stuff
}
Run Code Online (Sandbox Code Playgroud)