import
依賴庫是編程首要事件。就像呼吸一樣是那么的自然尸昧。scala
也不能免俗揩页。我們知道Java
和Scala
存在大量差異,但在import
依賴上卻包含大量類似烹俗。
本文列舉下scala
使用import
的一些特殊的點,對那些通用import
方法咱就不描述啦爆侣。
默認(隱含) import
在正式開始之前,咱們跑個題幢妄。
在使用scala時,我們發(fā)現(xiàn)即使沒有導入任何依賴, 如下代碼為何可以正常運行兔仰?
println("hello world.")
"01".toInt
編程語言是邏輯最嚴格的命令集合。代碼編譯/運行正常并不是銀彈蕉鸳。正常運行背后,它必然需要合理邏輯和解釋乎赴。而上面代碼正常執(zhí)行合理邏輯是:scala默認導入依賴庫,才保證常用api可以正常使用潮尝。
//默認導入庫
import java.lang._
import scala._
import Predef._
上面3個庫是代碼正常運行的邏輯支撐榕吼。
命名沖突 - 重命名庫中成員
在開發(fā)過程中,命名沖突并不在少數(shù).項目對命名規(guī)則要求越規(guī)范,命名沖突機會會越多.簡單來個例子:Date
在各個公共包中是常見的類.
import java.sql.Date //sql date 處理類
import java.uitl.Date //java 工具類中date處理類
如何正確使用合適的類,解決命名沖突的問題.方式有很多,scala重命名類就是其中的一個。如下所示:
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
重命名庫的成員既規(guī)避了命名沖突,又對類庫進行分類,增加了可讀性勉失。
隱藏對象/排除對象
隱藏對象import
方法和重命名思想類似羹蚣,操作方式如下:
import java.util.{Date => _} //隱藏對象Date
REPL 隱藏對象導入效果:
scala> import java.util.{Date => }
import java.util.{Date =>}
scala> new Date()
<console>:15: error: not found: type Date //Date對象被隱藏
? new Date()
? ^
至于原理,熟悉=>操作符的很容易理解乱凿。
排除對象操作:
import java.util.{Date => _, _} //隱藏對象Date,在加上通配導入所有對應
靜態(tài)導入
//示例1
val a = sin(0)
//示例2
val a = Math.sin(0)
示例1,2 最大的區(qū)別就是可讀性更強.這是靜態(tài)導入的功能顽素,靜態(tài)導入適用范圍是:java的靜態(tài)類和scala的object
方法咽弦。
//示例1
import java.lang.Math._ // _ 導入Math所有方法和變量供導入方使用
//示例2
import java.lang.Math
可讀性是提升效率和可維護性關鍵指標。
按需導入(import statement anywhere)
上文命名沖突需要重命名類胁出, 按需導入也能夠解決型型。按需導入通過限制類/包作用域起到導入的作用.import
可作用在對象/函數(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
包導入一些非常規(guī)操作,使用起來對代碼易用和可讀性上提升不少全蝶。
2020第一篇心情: [青海長云暗雪山闹蒜,孤城遙望玉門]