转自: https://docs.scala-lang.org/zh-cn/tour/package-objects.html
1、包对象说明
Scala 提供包对象作为在整个包中方便的共享使用的容器。
包对象中可以定义任何内容,而不仅仅是变量和方法。 例如,包对象经常用于保存包级作用域的类型别名和隐式转换。 包对象甚至可以继承 Scala 的类和特质
按照惯例,包对象的代码通常放在名为 package.scala
的源文件中。
每个包都允许有一个包对象。 在包对象中的任何定义都被认为是包自身的成员。
看下例。 假设有一个类 Fruit
和三个 Fruit
对象在包 org.sinovatio.fruits
中;
现在假设你要将变量 planted
和方法 showFruit
直接放入包 fruits中。 下面是具体做法:
1 package org.sinovatio 2 3 package object fruits { 4 val planted = List(Apple, Plum, Banana) 5 6 def showFruit(fruit: Fruit): Unit = { 7 println(s"${fruit.name}s are ${fruit.color}") 8 } 9 }
作为一个使用范例,下例中的对象 PrintPlanted
用导入类 Fruit
相同的方式来导入 planted
和 showFruit
,在导入包 org.sinovatio.fruits
时使用通配符:
1 package org.sinovatio.fruits 2 3 object PrintPlanted { 4 def main(args: Array[String]): Unit = { 5 for (fruit <- planted) { 6 showFruit(fruit) 7 } 8 } 9 }
2、包对象继承
包对象与其他对象类似,这意味着你可以使用继承来构建它们。 例如,一个包对象可能会混入多个特质:
1 package org.sinovatio 2 3 package object fruits extends Serializable { 4 val planted = List(Apple, Plum, Banana) 5 6 def showFruit(fruit: Fruit): Unit = { 7 println(s"${fruit.name}s are ${fruit.color}") 8 } 9 }