跳转到内容

Scala/对象

来自维基教科书,开放的书籍,开放的世界

在 Scala 中,对象是一个带有名稱的实例,具有字段和方法等成员。对象和类具有相同的名称并在同一个源文件中定义,被称为伴生对象。伴生对象具有特殊的访问控制属性,这在Scala/访问修饰符中介绍。

一个简单的对象示例

object SimpleObject
val a = SimpleObject

在第一行中,关键字“object”用于定义一个新对象,后面跟着对象的名称,这里为“SimpleObject”。在第二行中,一个名为“a”的值被赋值为名为“SimpleObject”的对象实例。

对象的成员类似于类的成员。有关更多信息,请参见Scala/类#成员。对象中成员的示例

object MembersObject {
  val someValue = "test"
  def someMethod(a:Int) = a*a
}
println("someValue is: " + MembersObject.someValue) //Prints "someValue is: test".
println("someMethod(3) gives: " + MembersObject.someMethod(3)) //Prints "someMethod(3) gives: 9".

对象还支持特殊的“apply”方法,有关更多信息,请参见Scala/类#Apply

对象的一种用途是包含独立于任何环境的字段和方法。一个例子是“math”,它是标准库中的一个对象,它包含几个仅依赖于传递给它们的任何参数(如果有)的字段和方法。

println("Value of pi: " + math.Pi) //Prints "Value of pi: 3.141592653589793"
println("Square root of 4: " + math.sqrt(4)) //Prints "Square root of 4: 2.0"
println("Square root of 5: " + math.sqrt(5)) //Prints "Square root of 5: 2.23606797749979"

对象的另一个用途是创建类的实例

class Rectangle(val a:Int, val b:Int)
object Rectangle {
  def createValidRectangle(a:Int, b:Int) = new Rectangle(math.max(a, 1), math.max(b, 1))
}
val validRectangle = Rectangle.createValidRectangle(3, -10000)
println("Valid rectangle: " + validRectangle.a + ", " + validRectangle.b) //Prints "Valid rectangle: 3, 1".

在上面,仍然可以通过直接使用“Rectangle”类的构造函数来创建无效的矩形。Scala/可见性描述了如何限制对构造函数的访问,这与对象结合使用,使得更容易确保和验证只创建某些给定类的有效类实例。

对象的第三个用途是创建 Scala 程序的入口点。这是通过定义一个具有特定签名的“main”方法来完成的

object ProgramEntryPoint {
  def main(args:Array[String]) = {
    println("Program execution start.")

    println("Program execution end.")
  }
}

行“def main(args:Array[String])”指示了入口点有效的必需签名。有关更多信息,请参见Scala/设置#编译 Scala

华夏公益教科书