当前位置: 首页 > news >正文

Scala 的包及其导入

  Scala使用包来创建用于模块化程序的命名空间。通过在Scala文件的顶部声明一个或多个包名称可以创建包,另一种声明包的方式是使用0,这种方式可以嵌套包,并且提供更好的范围与封装控制。对于包的导入,Scala与Java的区别之一便是,Scala可以在任意位置使用import语句。

1.1 Scala的包

  下面主要从包的定义、语法以及包的作用域介绍Scala包的相关知识。通过与Java中包的作用域对比说明两者的区别与联系。

1.Scala的包定义

  相比于Java中的包,Scala中的包可以定义在文件的开头,也可以在代码的任意位置。Scala的包用于解决类的命名冲突和类的文件管理。在引入类时加上包名可以区分不同的类,解决类名冲突的问题。 类的文件管理就是通过包名可以把具有相同功能的不同类组织在一起,放入同一个包中。

2.Scala包的语法

Java中包的语法为: 

package name

与Java相比,Scala中有两种包的定义语法,第一种与Java相同,第二种包的语法格式为: 

package name{
}

通过第二种方式,可以在{ }中定义不同的包,实现包的嵌套。

2d5a725f0ca84f1daee80fec5b96b3ef.jpeg

1.2 Scala的包的导入

  为了解决不使用包的全名这一问题,引入了包的导入方法。包的导入有两种方式,一种是显式导入,另一种是隐式导入。Scala中的隐式导入表示每个Scala程序默认都会隐式导入java.lang._和scala. Predef._中的所有成员。

1.Scala的导入语法

  在Scala中显式导入包使用import关键字。假如m包下有A、B、C三个类,如果想要导入 m包下所有类,使用import m. ;如果只需要导入m包中的A类,使用import m.A; 如果想要导入A和B两个类,使用import m.{A,B}。

2.导入成员重命名

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

import {A=>a} 

例如, import com.B.{a=>b}表示把B包中的a类重命名为b。

3.导入成员隐藏类

  如果一个包中包含多个类,除包中某一个类之外都需要导入,可以使用导入成员隐藏类的方法, 其语法格式为:

import {A=>_,_}

  其中第一个_表示需要隐藏的类,第二个_表示除需要隐藏的类之外的所有类。例如包A中有a,b,c,d四个类,需要隐藏d类,则可以使用import com.A.{d=>_,_}表示。

相关代码如下:

//1.单个导入
//import com.scala02.A
//import com.scala02.B//2.导入多个
//import com.scala02.{A,B}//3.导入一个包下所有的类:包名._
//import com.scala02._//4.导入一个包中的类,给他改个名字
//格式:import 包名.{原来的名字 => 新名字}
//import com.scala02.{A => BigA}//5.隐藏导入类
import com.scala02.{C=>_,_}object Test23 {//5.局部导入,就在方法内部去导入要用的包def main(args: Array[String]): Unit = {
//    import com.scala02.{A => BigA}
//    new BigA()new A()new B()new C()new Student()}
}

1.3 Scala的包对象

包对象的语法如下:

package object 包名

​​​​​​​3b1195eb6dce41e297c53526745af2e1.jpeg

http://www.lryc.cn/news/480760.html

相关文章:

  • 架构师备考-概念背诵(软件工程)
  • DIP switch是什么?
  • 【销帮帮-注册_登录安全分析报告-试用页面存在安全隐患】
  • 2024年下半年系统分析师论文
  • 【计算机网络】万字详解 UDP 和 TCP
  • 创建者模式之【建造者模式】
  • 电商系统中,如何解决部分商品在短时间大量访问的单一热点问题?------Range范围分片
  • 利用VMware workstation pro 17安装 Centos7虚拟机以及修改网卡名称
  • 前端 性能优化 (图片与样式篇)
  • A021基于Spring Boot的自习室管理和预约系统设计与实现
  • 量化交易系统开发-实时行情自动化交易-Okex市场深度数据
  • Qt教程(006):QMainWindow主窗口
  • 测试用例的设计
  • 代码随想录训练营Day20 | 93.复原IP地址 - 78.子集 - 90.子集II
  • [Meachines] [Medium] MonitorsThree SQLI+Cacti-CMS-RCE+Duplicati权限提升
  • Elasticsearch专栏-4.es基本用法-查询api
  • jmeter基础04_设置外观和字体
  • 重构代码之替换参数为显式方法
  • 三菱QD77MS定位模块速度限制功能
  • Axure PR 9 多级下拉选择器 设计交互
  • Java基础使用②Java数据变量和类型+小知识点
  • 从 HTTP 到 HTTPS 再到 HSTS:网站安全的演变与实践
  • Qt的跨平台介绍
  • 数据库DQL
  • Am I Isolated:一款安全态势基准测试工具
  • Unity性能优化 -- 性能分析工具
  • 【微信小程序】基本语法
  • go中的类型断言详解
  • vite构建的react程序放置图片
  • 学习事件循环