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"${}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"${}s are ${fruit.color}")
8 }
9 }