标签: 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))
有办法做到这一点吗?
答案 0 :(得分:2)
buffer是来自您的声明ListBuffer[Any]
buffer
ListBuffer[Any]
new ListBuffer[Any]()
当您将缓冲区转换为列表时,会保留相同的“内部类型”,这意味着您从List[Any]获得ListBuffer[Any]
List[Any]
scala“native”集合不支持不相关类型的集合(String,Int,Option [X]),您将丢失重要的类型信息
解决方案是使用元组代替,如果你的变量是有限长度的(2个元素的元组具有不同类型的元组,例如3个元素)
另一种解决方案是使用Shapeless HList。 This post非常适合解释什么是HList,为什么你想要一个,以及如何使用