统一类型系统 - scala中的Any,AnyRef,AnyVal

时间:2016-08-19 13:10:45

标签: scala

我正在尝试学习scala类型。 我正在下面的网站上学习。​​

ColdFusion + race conditions

在主题下。 统一类型系统 - AnyAnyRefAnyVal

class Person

val allThings = ArrayBuffer[Any]()

val myInt = 42             // Int, kept as low-level `int` during runtime

allThings += myInt         // Int (extends AnyVal)
                           // has to be boxed (!) -> becomes java.lang.Integer in the collection (!)

allThings += new Person()  // Person (extends AnyRef), no magic here

当我在scala工作表中尝试上面的代码时。 我在第二行遇到错误。

val allThings = ArrayBuffer[Any]() as value error: value ArrayBuffer

请在scala工作表中找到我的代码。

object test1 {
  println("Welcome to the Scala worksheet")

  class Person

  val allThings = ArrayBuffer[Any]()

  val myInt = 42             // Int, kept as low-level `int` during runtime

  allThings += myInt         // Int (extends AnyVal)
                           // has to be boxed (!) -> becomes java.lang.Integer in the collection (!)

  allThings += new Person()  // Person (extends AnyRef), no magic here

}

请帮帮我。

谢谢和问候,

1 个答案:

答案 0 :(得分:2)

TL; DR:您需要import ArrayBuffer使用FQCN。

<强> FQCN

ArrayBuffer不是您的某个类,它是Scala库中的class,它位于scala.collection.mutable.ArrayBufferscala.collection.mutable不是默认导入的软件包之一:

  • 的java.lang ._
  • 阶._
  • scala.Predef ._

因此,为了使用它,您需要使用完全限定的类名:

val allThings = scala.collection.mutable.ArrayBuffer[Any]()

<强>导入

您可以告诉Scala您希望scala.collection.mutable.ArrayBuffer简称为ArrayBuffer,这称为导入

您需要在代码之前添加以下代码:

import scala.collection.mutable.ArrayBuffer

然后,无论何时使用ArrayBuffer,编译器都将使用scala.collection.mutable.ArrayBuffer