99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Scala 為訪問控制修飾符添加作用域

2018-09-28 18:17 更新

為訪問控制修飾符添加作用域

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ò):

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)