6.scala中的包

版权申明:转载请注明出处。

文章来源:http://bigdataer.net/?p=287

排版乱?请移步原文获得更好的阅读体验

1.基础特性

scala中的包和java中的包类似,都是用来在大型工程中给类限定一个命名空间。有如下特性:
(1)包可以像内部类那样嵌套
(2)包路径不是绝对路径。
(3)包声明链net.bigdataer.blog并不会自动将中间包net和bigdataer变为可见。
(4)位于文件顶部不带花括号的包声明在整个文件范围内都有效。

2.包对象

包对象是scala为了突破jvm的限制,将工具函数或者常量类添加到包下面而设计的。这样,一个包既可以包含类、对象、特质也能包含函数或者变量。每个包都有一个包对象,需要在父包中定义,且名字和当前包名一样。举例:

scala    10行

package net.bigdataer
package object blog{
 val theme:String = "大数据"
}
package blog{
 class Post{
 val title = theme //从包中获取常量,这里也可以调用包提供的函数
 }
}

包对象被编译后会生成一个.class文件,位于相应的包下面。比如上面的包对象会被编译为blog.class并且位于net.bigdataer包下面。

3.重命名和隐藏方法

由于在scala中可以直接使用java中的类,这样会造成类重名,防止在使用中出现错误,可以在包引入语句中对要引入的类做重命名操作,如:

scala    3行

import java.util.{HashMap => JavaHashMap}
import scala.collection.mutable._

这样,java中的HashMap在使用中就为JavaHashMap而避免了与scala中的HashMap冲突。
使用类似HashMap => _并不是表示重命名,而是将HashMap隐藏。如:

scala    3行

import java.util.{HashMap => _,_}
import scala.collection.mutable._

这样隐藏了对java中HashMap的引入,只剩下scala中的HashMap.

更多文章请关注微信公众号:bigdataer

原文地址:https://www.cnblogs.com/bigdataer/p/6596329.html