微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

混淆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包中的所有代码都可以访问

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐