欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scala 包和引入

程序员文章站 2022-06-14 22:07:09
...

有两种方法来声明包,并把代码放入其中

  • 类似Java的方式
  • 类似名称空间的个方式,包名后加大括号,可以进行嵌套,灵活的进行省略

任何顶层包都被当做_root_包的成员,当包名称冲突时,可以从最外层指定包名

package bobsrockets.navigation
class Navigator

package bobsrockets.navigation {
  class Navigator
}

//将文件的不同部分放在不同的包中
package bobsrockets {
  package navigation {
    // In package bobsrockets.navigation
    class Navigator
    package tests {
      // In package bobsrockets.navigation.tests
      class NavigatorSuite
    }
  }
}

//避免花括号导致代码右移的写法
package bobsrockets 
package navigation 
class Navigator

当访问同一个包中的代码时,可以使用简短的非限定名称,省略部分前缀

引入包

import scala.collection._   //引入collection中的所有成员
import scala.collection.Vector 
import scala.collection.{Vector, Sequence}  //选择性导入一个或多个
import scala.collection.{Vector => Vec28}   //重命名导入
import java.util.{Date => _, _} //导入java.util包里除Date之外的所有文件

隐式引入

import java.lang._
import scala._//包含Scala的标准库,例如List
import Predef._//Predef对象包含类型定义,方法,隐式转换等

Scala中引入可以出现在任何地方,不必出现在文件的开始

def showFruit(fruit: Fruit) = {
  import fruit._
  println(name + "s are " + color)
}

访问修饰符

总体和Java类似,有一些不同

  • private:只能在class或者trait内部可见,外部类不能不能访问内部类的私有成员
  • protected:子类可见,同一个包中的其他类不可见(Java中对同一个包内的类也是可见的)
  • public:没有标识privateprotected的都是public

private[X]protected[X]:限定访问是私有的或者受保护的,直到X作用域以内

private[this]:对象私有,object-private,只有对象自己在类内部可以访问,其他相同的实例对象都不能访问

伴生对象:只有一个实例,实现static的功能,拥有对应类的所有访问权限

包对象

添加了关键字object,作用域是整个包,添加一些帮助方法,类型别名,隐式转换等

package object bobsdelights {
  def showFruit(fruit: Fruit) = {
    import fruit._
    println(name + "s are " + color)
  }
}