为什么我无法在Scala中将String的实例转换为Iterable [Char]

时间:2018-08-23 07:28:08

标签: scala

此行将失败:

"Hello".asInstanceOf[Iterable[Char]]

但是我可以将String的实例传递给这样的方法:

def someMethod(input: Iterable[Char]): Unit = { ... }
someMethod("Hello")

为什么?

1 个答案:

答案 0 :(得分:8)

String不扩展Iterable[Char]。这说明了投放失败的原因。

但是,Scala Predef defines an implicit conversionStringWrappedString,并且WrappedString 确实扩展了Iterable[Char]。这就是第二个示例起作用的原因。编译器添加了转换,因此编译后的代码看起来像这样:

someMethod(wrapString("Hello"))

如果您想知道为什么要这样做,那是因为String实际上是Java标准库中的java.lang.String(出于Java兼容性的原因),所以WrappedString被创建为adapter以使String适合Scala集合库,并添加了隐式转换以使其几乎无缝。