import依賴庫(kù)是編程首要事件。就像呼吸一樣是那么的自然。scala也不能免俗。我們知道Java和Scala存在大量差異,但在import依賴上卻包含大量類似。
本文列舉下scala使用import的一些特殊的點(diǎn),對(duì)那些通用import方法咱就不描述啦。
默認(rèn)(隱含) import
在正式開始之前,咱們跑個(gè)題。
在使用scala時(shí),我們發(fā)現(xiàn)即使沒有導(dǎo)入任何依賴, 如下代碼為何可以正常運(yùn)行?
println("hello world.")
"01".toInt
編程語言是邏輯最嚴(yán)格的命令集合。代碼編譯/運(yùn)行正常并不是銀彈。正常運(yùn)行背后,它必然需要合理邏輯和解釋。而上面代碼正常執(zhí)行合理邏輯是:scala默認(rèn)導(dǎo)入依賴庫(kù),才保證常用api可以正常使用。
//默認(rèn)導(dǎo)入庫(kù)
import java.lang._
import scala._
import Predef._
上面3個(gè)庫(kù)是代碼正常運(yùn)行的邏輯支撐。
命名沖突 - 重命名庫(kù)中成員
在開發(fā)過程中,命名沖突并不在少數(shù).項(xiàng)目對(duì)命名規(guī)則要求越規(guī)范,命名沖突機(jī)會(huì)會(huì)越多.簡(jiǎn)單來個(gè)例子:Date在各個(gè)公共包中是常見的類.
import java.sql.Date //sql date 處理類
import java.uitl.Date //java 工具類中date處理類
如何正確使用合適的類,解決命名沖突的問題.方式有很多,scala重命名類就是其中的一個(gè)。如下所示:
import java.sql.{Date => SqlDate}
import java.util.{Date => JavaDate}
scala REPL示例:
scala> import java.util.{Date => JavaDate}
scala> import java.sql.{Date => SqlDate}scala> new JavaDate()
res0: java.util.Date = Tue Mar 17 16:05:39 CST 2020
scala> new SqlDate(111111)
res2: java.sql.Date = 1970-01-01
重命名庫(kù)的成員既規(guī)避了命名沖突,又對(duì)類庫(kù)進(jìn)行分類,增加了可讀性。
隱藏對(duì)象/排除對(duì)象
隱藏對(duì)象import方法和重命名思想類似,操作方式如下:
import java.util.{Date => _} //隱藏對(duì)象Date
REPL 隱藏對(duì)象導(dǎo)入效果:
scala> import java.util.{Date => }
import java.util.{Date =>}
scala> new Date()
<console>:15: error: not found: type Date //Date對(duì)象被隱藏
? new Date()
? ^
至于原理,熟悉=>操作符的很容易理解。
排除對(duì)象操作:
import java.util.{Date => _, _} //隱藏對(duì)象Date,在加上通配導(dǎo)入所有對(duì)應(yīng)
靜態(tài)導(dǎo)入
//示例1
val a = sin(0)
//示例2
val a = Math.sin(0)
示例1,2 最大的區(qū)別就是可讀性更強(qiáng).這是靜態(tài)導(dǎo)入的功能,靜態(tài)導(dǎo)入適用范圍是:java的靜態(tài)類和scala的object方法。
//示例1
import java.lang.Math._ // _ 導(dǎo)入Math所有方法和變量供導(dǎo)入方使用
//示例2
import java.lang.Math
可讀性是提升效率和可維護(hù)性關(guān)鍵指標(biāo)。
按需導(dǎo)入(import statement anywhere)
上文命名沖突需要重命名類, 按需導(dǎo)入也能夠解決。按需導(dǎo)入通過限制類/包作用域起到導(dǎo)入的作用.import可作用在對(duì)象/函數(shù),甚至變量中.
//在類中
class ImportInClass{
import scala.util.Random
def printRandom {
val r = new Random
}
}
//在方法中
class ImportInMethod {
def printRandom {
import scala.util.Random
val r = new Random
}
}
以上是scala包導(dǎo)入一些非常規(guī)操作,使用起來對(duì)代碼易用和可讀性上提升不少。
2020第一篇心情: [青海長(zhǎng)云暗雪山,孤城遙望玉門]