Scala中的包及其导入

34 阅读3分钟

Scala 中的包与导入机制

Scala 的包机制用于组织和管理代码,避免命名冲突,其设计兼具 Java 的兼容性与 Scala 的灵活性。Scala 中声明包有两种方式:一是使用package关键字定义包名(如package com.example.utils),二是通过嵌套包结构(package com.example { package utils { ... } })。包不仅能包含类、对象和特质,还可直接存放函数与变量,这是 Scala 相比 Java 的灵活之处。

导入机制方面,Scala 的import语句可出现在代码任意位置(而非仅文件顶部),支持选择性导入(import java.util.{HashMap, ArrayList})、重命名(import java.util.{HashMap => JHashMap})和排除导入(import java.util.{HashMap => _, _})。Scala 默认导入java.lang._scala._Predef._,因此常用类型无需显式导入。此外,导入包对象(Package Object)中的成员可直接使用,无需前缀,极大简化了代码编写。

总结

  1. 包的声明:Scala 支持多形式包声明,且包内可直接包含函数 / 变量,比 Java 更灵活。
  2. 导入特性import语句位置灵活,支持选择、重命名、排除导入,默认导入常用包减少冗余。
  3. 包对象:可集中管理包级常量与工具方法,导入后直接使用,提升代码简洁性。

1.包的概念

作用: 区分同名的类; 类很多时,更好地管理类;控制访问范围;

2.包的基本使用

基本步骤:创建包 → 创建对象(类) → 导入类

示例:

1. 创建包。右键,新建软件包。名称小写。

2. 在包上右键,新建类

3. 在测试文件中引入类,使用。

3.包的定义格式

定义格式1: package 包名

定义格式2: package 包名 {}

定义格式3: package 包名{ package 包名  }

[注意]   一个惯例是将包命名为与包含 Scala 文件的目录名相同。

包名称应全部为小写 ,只能包含数字,字母,下划线,小圆点。不能使用数字开头,也不要用关键字。**

例如:

package demo.class.exec1 // 错误,因为class是关键字

package demo.12a // 错误,数字开头

提示:三个默认导入 import java.lang._ ; import scala._ ; import scala.Predef._

 

两种包的管理风格:

风格1:将包名与包含scala文件的目录名相同

Snipaste_2025-11-24_14-54-54.png

Snipaste_2025-11-24_14-55-18.png

风格2:嵌套package表示层级关系

eg:在一个文件中,使用多个并列的package

object TestPackage {  
  def main(args: Array[String]): Unit = {  
    val m1 =  new dxj.M()  
    m1.f2()  
    }  
}  
package dxj {  
  class M extends  com.td.teacher.Teacher {  
    def f2() {}  
  }  
}  
package com.td.teacher {  
  class Teacher() {  
    def f1(){}  
  }  
} 

4.导入包

Scala的导入语法:在Scala中显式导入包使用import关键字。

(1)import 包名  导入这个包下的顶层对象

(2)通配符导入: import 包名._ 导入这个包下所有的类

(3)import 包名.类名 导入这个包下的具体的类

(4)导入相同包的多个类:import java.util.{HashSet, ArrayList }

(5)导入成员重命名。如果在一个类中需要导入不同包中的成员且成员名相同,可以通过导入成员重命名的方式区分不同包中的成员,其语法格式为:

import java.util.{ArrayList=>JL} 表示把util包中的ArrayList类重命名为JL。

(6)局部导入:什么时候用,什么时候import。在其作用范围内部都可以使用。

(7)导入成员隐藏类。如果一个包中包含多个类,除包中某一个类之外都需要导入,可以使用导入成员隐藏类的方法,其语法格式为:把包中的A不导入。import 包.{A=>_ , _}