开发者学堂课程【Scala 核心编程-基础:Scala 包的引入和细节】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8962
Scala 包的引入和细节
内容介绍:
一、Scala 引入包基本介绍
二、Scala 引入包的细节和注意事项
一、Scala 引入包基本介绍
1、区别
Scala 的引入包使用到了 import, 基本的原理、机制和 Java 相同,但 Scala 中的 import 功能更加强大、更灵活。
2、关联
由于 Scala 语言源自于 Java,所以 java.lang 包中的类会自动引入到当前环境中,而 Scala 中的 scala 包和 Predef包的类也会自动引入到当前环境中,即起其下面的类可以直接使用。
二、Scala 引入包的细节和注意事项
1、import 语句在 Scala 中的位置
在 Scala 中,import 语句可以出现在任何地方,并不仅限于文件顶部,import 语句的作用一直延伸到包含该语句的块末尾。
(1)、语法的优点
部分未使用代码的情况下进行常规操作并不划算。故而在需要时在引入包,缩小 import 包的作用范围,有利于提高效率。
(2)、例子
class User {
import scala.beans.BeanProperty
//在此处引入,import 的作用域仅为大括号以内。
@BeanProperty var name : String = “”
}
class Dog {
@BeanProperty var name : String = “”
//在此处,即超出大括号的区域进行 import 的使用将会被系统报错。
}
(3)、实际运用
//当前具有两个类
//进行如上代码的编入可得到下图结果
此时,由于 import 的作用域位于 Class User 中,故而无法对 Class Dog 起到相应的效果。
(4)、解决方案
方法1、
在 Class Dog 处再次进行 import的 引用
方法2、
将 import 引入到最前方,即扩大其作用域范围。
2、导入全部类
(1)、理论
Java 中若欲导入包中所有的类,通过通配符*进行实现,Scala 中采用下划线_进行实现
(2)、演示
import scala.beans._ //_代表将此包下的所有内容都进行了引入,等价于*
3、导入部分类
(1)、理论
若欲得到的内容并非某包的全部,而是其中的几个类,可以采用选取器(大括号)
(2)、演示
def test(): Unit = {
//可使用选择器选择引入包的内容(java 中不存在此功能)
//只引入 import scala.collection.mutable 包下的 HashMap、HashSet
import scala.collection.mutable.{HashMap, HashSet}
var map = new HashMap()
var set = new HashSet()
}
4、重命名
(1)、理论
如果引入的多个包中含有相同的类,那么可以将不需要的类进行重命名以便于区分
(2)、演示
//创建一个 HashMap 将会出现以下情况
//其中存在三类HashMap,第一种为scala本身的可变 HashMap。第二种为scala.collection.immuta包下的HashMap,第三种为 java 下的 HashMap。
//由于出现了名字重复的状况,现今需要使用到 scala 提供的重命名功能。
//将 java.util.HashMap 暂时性重命名为 JavaHashMap(自身任意指定)
import java.util.-HashMap=>JavaHashMap, List
}
import scala.collection.mutable._
var map = new HashMap()
//此时 HashMap 指向的是 Scala 中的 HashMap
var map1 = new JavaHashMap();
//此时使用的 java 中 HashMap 的别名
5、隐藏
(1)、理论
如果某个冲突的类根本就不会用到,可直接将其隐藏。
(2)、演示
import java .util HashMap=>_,_} //含义为引入 java.util 包的所有类,但忽略 HashMap 的别名
//第一个_代表将 HashMap 进行隐藏,第二个_代表引入其余内容
var map = new HashMap()
//此时的 HashMap 指向的是 scala 中的 HashMap,而且 idea工 具的提示也不会提示 java util 的 HashMaple