三分鐘讓你瞭解Scala中的包比Java更加靈活!
包的作用和定義
同java中的包,Scala中的包主要用於大型工程程式碼的組織同時也解決命名衝突的問 題。Scala中的包與java有著諸多的相似之處,但Scala語言中的包更加靈活。
包定義方式一:
//將程式碼組織到cn.scala.xtwy包中 package cn.scala.xtwyabstract class Animal { //抽象欄位(域) var height:Int //抽象方法 def eat:Unit } class Person(var height:Int) extends Animal{ override def eat()={ println("eat by mouth") } } object Person extends App{ new Person(10).eat() } + 包定義方式二: //下面的程式碼定義了一個cn.scala.xtwy包 //在程式的任何地方都可以通過cn.scala.xtwy.Teacher來使用Teacher這個類package cn{ package scala{ package xtwy{ class Teacher {} } } }可以看出,我們可以在任何地方進行包中類的定義,scala幫助我們進行自動檔案組織 我們將Teacher.scala內容修改如下:package cn{ package scala{ package xtwy{ class Teacher {} } } } //添加了cn.scala.spark包,包中定義了一個SparkDemo類 package cn{ package scala{ package spark{ class SparkDemo{} } } }
package cn{ package scala{ //在包cn.scala下建立了一個Utils單例 object Utils{ def toString(x:String){ println(x) } //外層包無法直接訪問內層包,下面這一行程式碼編譯通不過 //def getTeacher():Teacher=new Teacher("john") //如果一定要使用的話,可以引入包 import cn.scala.xtwy._ def getTeacher():Teacher=new Teacher("john") } //定義了cn.scala.xtwy package xtwy{ class Teacher(var name:String) { //演示包的訪問規則 //內層包可以訪問外層包中定義的類或物件,無需引入 def printName()={Utils.toString(name)} } } } } object appDemo{ //scala允許在任何地方進行包的引入,的意思是引入該包下的所有類和物件 import cn.scala. import cn.scala.xtwy._ def main(args: Array[String]): Unit = { Utils.toString(new Teacher("john").name) new Teacher("john").printName() } }
//下面的程式碼給出了包物件的定義 package cn.scala.xtwy//利用package關鍵字定義單例物件 package object Math { val PI=3.141529 val THETA=2.0 val SIGMA=1.9 } class Coputation{ def computeArea(r:Double)=Math.PIrr }
//將java.util.HashMap重新命名為JavaHashMap import java.util.{ HashMap => JavaHashMap } import scala.collection.mutable.HashMap object RenameUsage { def main(args: Array[String]): Unit = { val javaHashMap = new JavaHashMapString, StringjavaHashMap.put("Spark", "excellent") javaHashMap.put("MapReduce", "good") for(key <- javaHashMap.keySet().toArray){ println(key+":"+javaHashMap.get(key)) } val scalaHashMap=new HashMap[String,String] scalaHashMap.put("Spark", "excellent") scalaHashMap.put("MapReduce", "good") scalaHashMap.foreach(e=>{ val (k,v)=e println(k+":"+v) }) } } + 隱藏類 //通過HashMap=> _,這樣類便被隱藏起來了 import java.util.{HashMap=> ,} import scala.collection.mutable.HashMapobject RenameUsage { def main(args: Array[String]): Unit = {//這樣的話,HashMap便無歧義地指向scala.collection.mutable.HashMapval scalaHashMap=new HashMap[String,String] scalaHashMap.put("Spark", "excellent") scalaHashMap.put("MapReduce", "good") scalaHashMap.foreach(e=>{ val (k,v)=e println(k+":"+v) }) }
文章來自:https://www.itjmd.com/news/show-2216.html