spark||flink||scala

包对象

2019-05-09  本文已影响4人  达微

包对象
Scala提供包对象作为在整个包中共享的方便容器。

包对象可以包含任意定义,而不仅仅是变量和方法定义。例如,它们经常用于保存包范围类型的别名和隐式转换。包对象甚至可以继承Scala类和特征。

按照惯例,包对象的源代码通常放在一个名为的源文件中package.scala。

每个包都允许有一个包对象。放置在包对象中的任何定义都被视为包本身的成员。

见下面的例子。首先假设包中有一个类Fruit和三个Fruit对象 gardening.fruits:

// in file gardening/fruits/Fruit.scala
package gardening.fruits

case class Fruit(name: String, color: String)
object Apple extends Fruit("Apple", "green")
object Plum extends Fruit("Plum", "blue")
object Banana extends Fruit("Banana", "yellow")

现在假设您要将变量planted和方法showFruit直接放入包中gardening.fruits。这是如何做到的:

// in file gardening/fruits/package.scala
package gardening
package object fruits {
  val planted = List(Apple, Plum, Banana)
  def showFruit(fruit: Fruit): Unit = {
    println(s"${fruit.name}s are ${fruit.color}")
  }
}

作为使用网站的外观,下面的对象一个例子PrintPlanted进口planted,并showFruit在它到底进口类的方法相同Fruit,使用上包gardening.fruits通配符导入:

// in file PrintPlanted.scala
import gardening.fruits._
object PrintPlanted {
  def main(args: Array[String]): Unit = {
    for (fruit <- fruits.planted) {
      showFruit(fruit)
    }
  }
}

包对象与其他对象类似,这意味着您可以使用继承来构建它们。例如,人们可能会混合几个特征:

package object fruits extends FruitAliases with FruitHelpers {
  // helpers and variables follows here
}

请注意,方法重载在包对象中不起作用。

https://docs.scala-lang.org/tour/package-objects.html

上一篇下一篇

猜你喜欢

热点阅读