混淆scala私有字段变量

我是斯卡拉研究的第三天.使用书“开始 scala”.

作者使用一个例子来显示变量define与val var之间的差异而没有var val:

class Book(private val title: String) {
   def printTitle(b: Book) {
       println(b.title)
   }
}

在控制台中:

scala> val book = new Book("Beginning Scala")
book: Book = Book@ea05be
scala> book.printTitle(new Book("Beginning Erlang"))
Beginning Erlang

这里让我感到困惑的是没有/没有val var,而是私有修饰符:

我不确定我是否理解私权,但如果scala希望将标题作为私有字段,那么为什么它允许其他人从外部访问它,我认为prinTitle应该无法访问新书(“Beginning Erlang”)的标题字段

解决方法

标题是类的私有,而不是实例.由于方法printTitle是类的成员,因此它可以访问其他实例的私有值.

如果您希望标题对实例是私有的,则可以使用private [this]修饰符.

此外,private [package]修饰符,其中package是定义所在的包的名称,可以与包共享私有成员.例如

package com.sample.foo

class Book(private[foo] title: String)

com.sample.foo包中的所有代码都可以访问

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...