ListBuffer [Any]可以保留元素的类型吗?

时间:2017-04-17 17:08:43

标签: scala

var buffer = new ListBuffer[Any]()

buffer += "Some Text"
buffer += 10
buffer += Some("text")

因此,如果我将此ListBuffer转换为列表,则不会保留该类型。

scala> buffer.toList
res5: List[Any] = List(123, Some(abc))

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

buffer是来自您的声明ListBuffer[Any]

new ListBuffer[Any]()

当您将缓冲区转换为列表时,会保留相同的“内部类型”,这意味着您从List[Any]获得ListBuffer[Any]

scala“native”集合不支持不相关类型的集合(String,Int,Option [X]),您将丢失重要的类型信息

解决方案是使用元组代替,如果你的变量是有限长度的(2个元素的元组具有不同类型的元组,例如3个元素)

另一种解决方案是使用Shapeless HList。 This post非常适合解释什么是HList,为什么你想要一个,以及如何使用