其他的都和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, 例如以下代码段
- // Create the Spark execution environment (cache, map output tracker, etc)
- private[spark] val env = SparkEnv.create(
- conf,
- "<driver>",
- conf.get("spark.driver.host"),
- conf.get("spark.driver.port").toInt,
- isDriver = true,
- isLocal = isLocal)
- SparkEnv.set(env)
- // Used to store a URL for each static file/jar together with the file's local timestamp
- private[spark] val addedFiles = HashMap[String, Long]()
- private[spark] val addedJars = HashMap[String, Long]()
- // Keeps track of all persisted RDDs
- private[spark] val persistentRdds = new TimeStampedHashMap[Int, RDD[_]]
- private[spark] val metadataCleaner =
- new MetadataCleaner(MetadataCleanerType.SPARK_CONTEXT, this.cleanup, conf)
- // Initialize the Spark UI
- private[spark] val ui = new SparkUI(this)