现在的位置: 首页 > 综合 > 正文

Scala 访问权限控制——Scala Access Modifiers

2018年04月08日 ⁄ 综合 ⁄ 共 3529字 ⁄ 字号 评论关闭

其他的都和Java的差不多,唯一的区别是多了Scope protect

Scope of protection

Access modifiers in Scala can be augmented with qualifiers. A modifier of the form private[X] or protected[X] means that access is private or protected "up to" X, where X designates some enclosing package, class or singleton object. Consider the following example:

<span class="kwd">package</span><span class="pln"> society </span><span class="pun">{</span><span class="pln">
   </span><span class="kwd">package</span><span class="pln"> professional </span><span class="pun">{</span><span class="pln">
      </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Executive</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
         </span><span class="kwd">private</span><span class="pun">[</span><em>professional</em><span class="pun">]</span><span class="pln"> </span><span class="kwd">var</span><span class="pln"> workDetails </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">null</span><span class="pln">
         </span><span class="kwd">private</span><span class="pun">[</span><em>society</em><span class="pun">]</span><span class="pln"> </span><span class="kwd">var</span><span class="pln"> friends </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">null</span><span class="pln">
         </span><span class="kwd">private</span><span class="pun">[</span><em>this</em><span class="pun">]</span><span class="pln"> </span><span class="kwd">var</span><span class="pln"> secrets </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">null</span><span class="pln">

         </span><span class="kwd">def</span><span class="pln"> help</span><span class="pun">(</span><span class="pln">another </span><span class="pun">:</span><span class="pln"> </span><span class="typ">Executive</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
            println</span><span class="pun">(</span><span class="pln">another</span><span class="pun">.</span><span class="pln">workDetails</span><span class="pun">)</span><span class="pln">
            println</span><span class="pun">(</span><span class="pln">another</span><span class="pun">.</span><span class="pln">secrets</span><span class="pun">)</span><span class="pln"> </span><span class="com">//ERROR</span><span class="pln">
         </span><span class="pun">}</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">
   </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span>

Note the following points from the above example:

  • Variable workDetails will be accessible to any class within the enclosing packageprofessional.

  • Variable friends will be accessible to any class within the enclosing packagesociety.

  • Variable secrets will be accessible only on the implicit object within instance methods (this).


Spark中到处都可以看到 Scope of protection, 例如以下代码段

[java] view
plain
copy在CODE上查看代码片派生到我的代码片

  1. // Create the Spark execution environment (cache, map output tracker, etc)  
  2.   private[spark] val env = SparkEnv.create(  
  3.     conf,  
  4.     "<driver>",  
  5.     conf.get("spark.driver.host"),  
  6.     conf.get("spark.driver.port").toInt,  
  7.     isDriver = true,  
  8.     isLocal = isLocal)  
  9.   SparkEnv.set(env)  
  10.   
  11.   // Used to store a URL for each static file/jar together with the file's local timestamp  
  12.   private[spark] val addedFiles = HashMap[String, Long]()  
  13.   private[spark] val addedJars = HashMap[String, Long]()  
  14.   
  15.   // Keeps track of all persisted RDDs  
  16.   private[spark] val persistentRdds = new TimeStampedHashMap[Int, RDD[_]]  
  17.   private[spark] val metadataCleaner =  
  18.     new MetadataCleaner(MetadataCleanerType.SPARK_CONTEXT, this.cleanup, conf)  
  19.   
  20.   // Initialize the Spark UI  
  21.   private[spark] val ui = new SparkUI(this)
     

抱歉!评论已关闭.