scala-16Scala中包的定义、包对象、包的引用、包的隐式引用代码实战

本文介绍Scala中的包管理概念,包括包的定义、包对象、包的引用及隐式引用,并通过实战代码展示如何操作这些包特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scala中包的定义、包对象、包的引用、包的隐式引用代码实战

内容:
1、Scala中包的定义实战
2、包对象代码实战
3、包引用代码实战
4、包的隐式引用代码实战

包可以嵌套,同一个包可以定义在多个文件当中,也不需要将源文件的目录和包之间对应起来。

作用域规则(可访问上层作用域的名称)

)使用绝对包名——以_root_开始
2)串联式包语句(上层目录不可见)

	package com.horstmann.impatient {
  // com和com.horstmann的成员在这里是不可见的
  package people {
    class Person
    ...
  }

文件顶部标记

如果文件中的所有代码都属于同一个包,在文件顶部标记包是更好的做法。

5
6
7
8
9
10
11
12	package com.horstmann.impatient
package people
class
  ...
 
// 上面的等同于
package com.horstmann.impatient {
  package people {
    class Person
    ...
  }
}

文件的内容都在com.horstmann.impatient.people包内,但com.horstmann.impatient包内的内容对于这个文件来说是可见的(comcom.horstmann是不可见的)。

 

包对象

包可以包含类、对象和特质,但不能包含函数或变量的定义,这是JVM的局限。将工具函数或常量添加到包,而不是某个Utils对象,更为合理。(这也是初学时觉得Scala的包引入有些奇怪的原因了。)包对象就是为了解决这个局限。


package com.horstmann.impatient
package object people {
  val defaultName = "John Q. Public"
}
package people {
  class Person {
    val name = defaultName
  }
}

//每个包可以有一个包对象,需要在父包中定义,名称与子包一样。

 

包可见性

Scala则是“公共可见”的。如果要想让成员在某个包内可见,可以使用类似于对象私有字段的语法来指定:   

private[package-name]

 package-name包中的所有类和对象都可以访问private后面的成员。


引入(import

importjava.awt._  // 引入包内所有成员

import语句可以出现在任何地方,而不是只能在文件顶部。import的效果从开始延伸到语句块的结束。这可以大幅减少名称冲突的可能性。

重命名和隐藏成员

如果想要引入包中的几个成员,可以使用selector(选取器)


1
2
3
4
5
6
7	import java.awt.{Color, Font}
 
// 重命名成员
import java.util.{HashMap => JavaHashMap}
 
// 隐藏成员
import java.util.{HashMap => _, _} // 引入了util包的所有成员,但是HashMap被隐藏了

在包中可以定义包对象,该包中所有的类都可以直接访问包对象中的成员


Scala的隐式引用:

Import Java.lang._

Import scala._

Import predef._   //predif对象的所以东西


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值