scala字段权限问题
1.对象私有字段
1)private
class Counter(num: Int) {
private var value = 0
def increment() = {
value += 1
}
def isLess(other: Counter) = value < other.value
def printlnNum(): Unit = {
println("num: " + num)
}
// def isLess(other: Counter) = value
}
object Counter {
def main(args: Array[String]): Unit = {
/*
* 1. 方法可以访问类的所有对象的私有字段
*/
val counter1 = new Counter(3)
counter1.increment()
val counter2 = new Counter(4)
counter2.increment()
counter2.increment()
println(counter1.isLess(counter2)) // 结果:true 因为1<2
}
}
解释:方法可以访问类的所有对象的私有字段。 所以即使value字段是private的,非当前对象other对象也可以访问到value字段。
2) private[this]

解释:私有字段加上[this]修饰符,可以字面简单的理解为该字段是私有的(private)并且只限当前对象[this]使用。 所有other对象访问不到 value 字段。
3)类构造参数
class Counter(num: Int) {
private var value = 0
def increment() = {
value += 1
}
def isLess(other: Counter) = value < other.value
// def isLess(other: Counter) = value
def subNum(other: Counter): Int = {
num - other.num
}
}
// 测试
object Counter {
def main(args: Array[String]): Unit = {
val counter1 = new Counter(3)
val counter2 = new Counter(4)
println(counter1.subNum(counter2))
}
}
编译会报 error: value num is not a member of cn.XX.quickScala.jurisdiction.Counter。
解释:类构造参数不是字段,所以每个类的构造参数都只能当前对象this访问,是不能在当前类中访问另一个同一个类对象的构造参数的【虽然能点出来,但编译通不过】
解决方案: 加字段,将类构造参数赋值给字段

结果是 -1
总结:
private[this] 字段 和 类构造参数都是只能在当前对象范围内访问到,是访问不到同一个类的另一个对象的 private[this]字段 或 类构造参数的。
但需要注意,访问另一个对象的private[this] 编译器直接会提示找不到,编程的时候是 . 不出来的。而访问另一个对象的 类构造参数时,是可以 . 出来的,但编译通不过。
private 所有的类对象都可以访问到,不管是当前this对象还是传入的外围同一个类对象。 同java一样,private字段是只能在当前类型访问的,在类外面是无法访问到的。
scala字段权限问题的更多相关文章
- Sharepoint 2013列表视图和字段权限扩展插件(免费下载)!
记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有 ...
- Winform开发框架之字段权限控制
在我的很多Winform开发项目中(包括混合框架的项目),统一采用了权限管理模块来进行各种权限的控制,包括常规的功能权限(按钮.菜单权限).数据权限(记录的权限),另外还可以进行字段级别的字段权限控制 ...
- Scala 字段定义
Scala 中定义字段只有val, var两种方式,都要在定义的同时即赋值,var 可以用占位符' _ '代替. 抽象类中定义的抽象字段不用赋初值,抽象方法也不用写方法体.(在子类中给抽象字段赋值和实 ...
- scala 访问权限详解
private/protected [包名/类名/this] 即可指定变量的作用域.(this代表只有当前实例(即对象)可以访问) 伴生类和伴生对象中的成员可以相互访问. class PackageO ...
- SNF快速开发平台2019-权限管理模型-记录级-字段级权限实践
1.1.1 字段级权限 字段级权限适用于对不同人的能否查看或录入不同表不同字段的权限控制. 是否启用字段级权限配置 不启用字段级权限后,[用户权限管理]程序[字段级权限]按钮会隐藏,导致无法给管理其 ...
- 基于SqlSugar的开发框架循序渐进介绍(9)-- 结合Winform控件实现字段的权限控制
字段的权限控制,一般就是控制对应角色人员对某个业务对象的一些敏感字段的可访问性:包括可见.可编辑性等处理.本篇随笔结合基于SqlSugar的开发框架进行的字段控制管理介绍. 在设计字段权限的时候,我们 ...
- Scala学习(五)---Scala中的类
Scala中的类 摘要: 在本篇中,你将会学习如何用Scala实现类.如果你了解Java或C++中的类,你不会觉得这有多难,并且你会很享受Scala更加精简的表示法带来的便利.本篇的要点包括: 1. ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- [Scala]Scala学习笔记四 类
1. 简单类与无参方法 class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的 } 备注 在Scala中,类并不声明为 ...
随机推荐
- 1java异常详解
语法错误.编译时错误语义错误.逻辑错误.运行时错误 数组下标越界,c,c++不检查,需要程序员控制. 1.注意:这里说的异常是运行期错误,不包括编译期错误. 2.try尝试运行,catch捕获并处理, ...
- 使用 Azure CLI 管理 Azure 磁盘
Azure 虚拟机使用磁盘来存储 VM 操作系统.应用程序和数据. 创建 VM 时,请务必选择适用于所需工作负荷的磁盘大小和配置. 本教程介绍如何部署和管理 VM 磁盘. 学习内容: OS 磁盘和临时 ...
- 基于php-fpm的配置详解
php5.3自带php-fpm/usr/local/php/etc/php-fpm.confpid = run/php-fpm.pidpid设置,默认在安装目录中的var/run/php-fpm.pi ...
- Unity调用安卓中的方法遇到的问题
最近在用U3D做一个简单的迷宫游戏,在项目中利用Unity制作游戏场景,在android中调用游戏场景,并在游戏结束后调用安卓方法,传递参数,退出游戏场景 查找网上资料,基本上Unity调用安卓的写法 ...
- 铁乐学Python_day12_装饰器
[函数的有用信息] 例: def login(user, pwd): ''' 功能:登录调用 参数:分别有user和pwd,作用分别是用户和密码: return: 返回值是登录成功与否(True,Fa ...
- 第八章 计时器(DIGCLOCK)
/*-------------------------------------- DIGCLOCK.C -- Digital Clock (c) Charles Petzold, 1998 ----- ...
- November 20th 2016 Week 47th Sunday
Learn from yesterday, live for today, look to tomorrow. 学习昨天,活在今天,展望明天. There is always room at the ...
- Phthon3.4 新特性
1. print的变化:. 在python3.0中,print成为了一个函数,将传入的参数一输出. Python3.0: Python 2.5: 2.使用比较操作符时,如果被比较的对象没有 ...
- ijcai statistics
- python第五课——流程控制语句
流程控制语句: 分类: 1).顺序结构 2).判断结构解析:如果...否则... 3).循环结构 1.判断结构: 格式分类:三种格式 格式一: ① if 条件表达式: 语句块 ② 执行流程: 计算机会 ...