9.Scala- 包和引入

匿名 (未验证) 提交于 2019-12-02 23:45:01

第9章 包和引入

9.1 包/作用域

在 Java 和 Scala 中管理项目可以使用包结构,C 和 C# 使用命名空间。

对于 package,有如下几种形式:

1)形式体现:

package com.nick.impatient.people  class Person {      val name = "Nick"   def play(message: String): Unit ={        }  }

等同于:

package com.nick.impatient package.people  class Person {      val name = "Nick"   def play(message: String): Unit ={        }  }

等同于:

package com.nick.impatient{ // com 和 com.nick 的成员在这里不可见   package people{      class Person {        val name = "Nick"       def play(message: String): Unit ={        }     }   } }

尖叫提示:位于文件顶部不带花括号的包声明在整个文件范围内有效。

/*   1、包也可以向内部类那样嵌套,作用域原则:可以直接向上访问。即,子 package 中直接访问父 package 中的内容。(即:作用域)   2、包对象可以持有函数和变量(可以直接在包里面定义函数和变量)   3、引入语句可以引入包、类和对象(import scala)(import scala.collection.mutable.Map.add)   4、源文件的目录和包之间并没有强制的关联关系(包不会体现成文件夹形式,Java会强制关联)   5、可以在同一个 .scala 文件中,声明多个并列的 package   6、包名可以相对也可以绝对,比如,访问 ArrayBuffer 的绝对路径是:   _root_.scala.collection.mutable.ArrayBuffer   相对路径可以写成:mutable.ArrayBuffer  */

9.2 包对象

包可以包含类、对象和特质 trait,但是不能包含函数和变量的定义,这个是Java 虚拟机的限制。
把工具函数或者常量添加到包而不是某个 Utils 对象,这是更加合理的做法。包对象的出现正是
为了解决这个局限。每个包都可以由一个包对象。你需要在父包中定义它,且名称与子包一样。
package com.nick.impatient  package object people1{   val defaultName = "Nick" }  package people1{      class people1 {     var name = defaultName //从包对象拿到的常量   } }

9.3 包可见性

在 Java 中、没有被声明为 public、private 或 protected 的类成员在包含该类的包可见。在Scala 中,

你可以通过修饰符达到同样的效果。以下方法在它自己的包中可见:

package com.nick.impatient.people  class Person1 {    private[people] def description = "名字:" + name    }

当然,也可以将可见度延展到上层包:

private[impatient] def description = "名字:" + name

9.4 引入

通过 import 进行包的引入,_ 类似于 java 中的 *

9.5 重命名和隐藏方法

1)通过包选取器选择单个类:
import java.awt.{Color, Font} Color.RED Font.BOLD

2)重命名:
如果你想要引入包中的几个成员,可以像这样使用选取器(selector),而且选取得同时,可以
重命名:
//重命名 import java.util.{HashMap => JavaHashMap, List} import scala.collection.mutable._ new JavaHashMap[String, Int] new HashMap[String, Int]

而 HashMap 则对应 scala.collection.mutable.HashMap。
2)隐藏:
选取其 HashMap =>_ 将隐藏某个成员而不是重命名它。这仅在你需要引入其他成员时用:
import java.util.{HashMap => _, _}  import scala.collection.mutable._

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!