加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

混淆scala私有字段变量

发布时间:2020-12-16 18:22:55 所属栏目:安全 来源:网络整理
导读:我是斯卡拉研究的第三天.使用书“开始 scala”. 作者使用一个例子来显示变量define与val var之间的差异而没有var val: class Book(private val title: String) { def printTitle(b: Book) { println(b.title) }} 在控制台中: scala val book = new Book("B
我是斯卡拉研究的第三天.使用书“开始 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包中的所有代码都可以访问

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读