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中,类并不声明为 ...
随机推荐
- 2.MyBatis 动态SQL
动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格 ...
- 本地sql大文件导入数据库
mysql中配置my.ini interactive_timeout = 120 wait_timeout = 120 max_allowed_packet = 32M 导入sql运行命令 sourc ...
- 搜索关键字自动更正 - Oracle Endeca Server
做了几个Oracle Endeca 电商项目.每个项目都会有搜过关键字拼写错误更正(Spelling Correction)的需求.淘宝也有类似功能. Oracle Endeca Sever提供了关键 ...
- .NET 2.0 参考源码索引
http://www.projky.com/dotnet/2.0/Microsoft/CSharp/csharpcodeprovider.cs.htmlhttp://www.projky.com/do ...
- SQL Server ->> 存储过程sp_describe_first_result_set解析T-SQL语句的结果集结构信息
返回 Transact-SQL 批处理的第一个可能结果集的元数据. 如果批处理没有返回结果,则返回一个空的结果集. 如果数据库引擎无法确定将通过执行静态分析来执行的第一个查询的元数据,则引发错误. E ...
- 拟牛顿 DFP matlab
function sevnn x=[1,0]'; [x,val]=dfp('fun','gfun',x) end function f=fun(x) f=100*(x(1)^2-x(2))^2+(x( ...
- jquery根据字符切割字符串
var str=new String(); var arr=new Array(); str="ddd,dsd,3,dd,g,k"; //可以用字符或字符串分割 arr=str.s ...
- 4-3 R语言函数 mapply
#mapply(函数/函数名,数据,函数相关的函数) > list(rep(1,4),rep(2,3),rep(3,2),rep(4,1)) [[1]] [1] 1 1 1 1 [[2]] [1 ...
- Spark系列-核心概念
Spark系列-初体验(数据准备篇) Spark系列-核心概念 一. Spark核心概念 Master,也就是架构图中的Cluster Manager.Spark的Master和Workder节点分别 ...
- BZOJ4259:残缺的字符串(FFT)
Description 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同 ...