为什么我可以使用StringBuilder而不在scala中显式导入它?

时间:2015-11-10 13:32:36

标签: scala import stringbuilder

我正在使用scala 2.11.0

我注意到StringBuilder是在scala.collection.mutable.StringBuilder和java.lang.StringBuilder中定义的。我还注意到scala隐式导入java.lang。,scala。,scala.Predef ._

为什么我在编写时使用scala.collection.mutable.StringBuilder而不是java.lang.StringBuilder

val def = new StringBuilder

感谢

3 个答案:

答案 0 :(得分:3)

您可以通过查看package.scala

来检查scala导入的内容

第74-45行按

导入StringBuilder
type StringBuilder = scala.collection.mutable.StringBuilder
val StringBuilder = scala.collection.mutable.StringBuilder

答案 1 :(得分:2)

因为默认情况下所有here都可用。即scala._默认可用。

在该包对象中,您可以看到:

 type StringBuilder = scala.collection.mutable.StringBuilder

这就是new StringBuilder执行scala.collection.mutable.StringBuilder而非java.lang.StringBuilder

的原因

答案 2 :(得分:0)

Scala使用类型别名来确保核心scala类型在没有导入的情况下可用。

https://github.com/scala/scala/blob/27da46343cd545534819300235bc64ab74958c92/src/library/scala/package.scala#L74将带您进入类型别名声明。

此链接也会有所帮助 - Understanding what 'type' keyword does in Scala

请注意,由于类型别名声明位于Scala包对象中,并且scala._是隐式导入的,因此它会将类型别名声明带入每个编译单元的作用域。