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