如何获得Seq [String]而不是Seq [Any]?

时间:2018-10-02 11:45:46

标签: scala collections

我需要进行以下转换,columnNames应该为Seq[String],但是始终为Seq[Any]。 我该如何解决这个任务?

val cols = Seq("col1","col2")
val columnNames: Seq[String] = cols ++ "col3"

3 个答案:

答案 0 :(得分:2)

您应该这样做:

val columnNames: Seq[String] = cols :+ "col3"

val columnNames: Seq[String] = cols ++ Seq("col3")

在您的情况下,结果为Seq[Any],因为AnyStringChar的共同超类型

答案 1 :(得分:0)

应为: val columnNames: Seq[String] = cols :+ "col3"

:+是someVariable.next()返回的任何类型的方法。

您将获得类Any是Scala类层次结构的根。 Scala执行环境中的每个类都直接或间接继承自该类。

答案 2 :(得分:0)

++是两个集合上的二进制运算符(方法)。但是:++:是向element添加collection的运算符(collection应该始终与:相邻,并且{要添加到集合中的element应该始终与+中的:+相邻,即,它应该用作{{1}的collection :+ elementelement +: collection }或appendprepend。因此,element将为我们提供预期的答案,因为这样collection将被视为将cols :+"col3"添加到"col3" string element

在使用cols时,collection cols ++ "col3"被编译器视为一个集合,即String"col3"是一个集合的字符串。因此,结果集合为List('c','o','l','3'),因为它包含字符串和字符,编译器将colsList[Any]的超类型推断为String