【问题标题】:Can ListBuffer[Any] retain the type of element?ListBuffer[Any] 可以保留元素的类型吗?
【发布时间】:2017-09-13 08:06:58
【问题描述】:
var buffer = new ListBuffer[Any]()

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

所以,如果我将此 ListBuffer 转换为列表,它不会保留类型。

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

有没有办法做到这一点?

【问题讨论】:

  • 类型为Any。你想保留什么类型?
  • 是的,类型被保留。如您的示例所示,如果您从ListBuffer[X] 开始并在其上应用.toList,您将获得List[X]。转换过程中不会丢失类型信息。

标签: scala


【解决方案1】:

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

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

scala“原生”集合不支持不相关类型(String、Int、Option[X])的集合,你会丢失重要的类型信息

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

另一种解决方案是使用ShapelessHList。 This post很好的解释了什么是HList,为什么要一个,怎么用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多