W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Scala 的訪問修飾符可以添加作用域參數(shù)。作用域的語法如下:
private[x]或protected[x]
其中 x 代表某個(gè)包,類或者對(duì)象,表示可以訪問這個(gè) Private 或的 protected 的范圍直到 X。
通過為訪問修飾符添加作用域參數(shù),可以非常精確的控制所定義的類型能夠被其它類型訪問的范圍。尤其是可以支持 Java 語言支持的 package private,package protected 等效果。
下面的例子為這種用法的一個(gè)示例:
package bobsrockets
package navigation{
private[bobsrockets] class Navigator{
protected[navigation] def useStarChart(){}
class LegOfJourney{
private[Navigator] val distance=100
}
private[this] var speed = 200
}
}
package launch{
import navigation._
object Vehicle{
private[launch] val guide=new Navigator
}
}
在這個(gè)例子中,類 Navigator 使用 private[bobsrockets] 來修飾,這表示這個(gè)類可以被 bobsrockets 中所有類型訪問,比如通常情況下 Vehicle 無法訪問私有類型 Navigator,但使用包作用域之后,Vechile 中可以訪問 Navigator。
這種技巧在分散在多個(gè) Package 的大型項(xiàng)目時(shí)非常有用,它允許你定義一些在多個(gè)子包中可以訪問,但對(duì)使用這些 API 的外部客戶代碼隱藏,而這種效果在 Java 中是無法實(shí)現(xiàn)的。
此外,Scala 還支持一種比 private 還要嚴(yán)格的訪問控制,本例中的 private[this],只允許在定義該成員的類型中訪問,它表示該成員不僅僅只能在定義該成員的類型中訪問,而且只能是由該類型本身訪問。比如:本例中 speed,使用 protected[this],speed,和 this.speed 只在定義該成員的實(shí)例中可以訪問,下面的用法也是不合法的,即使它們也在 Navigator 里面。當(dāng)由于是新創(chuàng)建的另外的實(shí)例,編譯出錯(cuò):
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: