我们在用Java的时候经常把一些字段定义为private类型来完成封装,这样外界就无法访问。

如果外界访问或者修改该字段的时候,只能通过该字段提供的getter和setter方法来实现。

在Scala中是没有getter和setter一说的。

用了value 和 value_= 来分别代替了getter和setter。

下面我们看个例子

class Counter{
private var privateValue = 0;//私有变量,外界无法直接访问
def value = privateValue;//定义一个方法,方法名为我们想要的字段的名称,代替getter
def value_= ( newValue : Int ){//主语 value_= 是方法名字
value = newValue;
} //注意,scala中默认方法是public的
}
object MyCounter{
def main(args :Array[String]){
val myCounter = new Counter;
println(myCounter.value);//调用value方法访问value,相当于getter
myCounter.value = 3 ;//为value设置新值,相当于setter
}
}

注意,这里的value不是唯一名字,可以用别的名字。

def age = privateAge;           def age_= (newAge :Int){ age = newAge;}

myAge.age;//访问age           myAge = 3;//设置age为3

其实Scala是对每个字段自动生成getter和setter方法的,不过你可以控制这个过程如下:

■ 如果字段是私有的,则getter和setter方法也是私有的

  就是说明,当我们定义一个字段为私有的时候,自动生成的getter和setter也不能被外界使用了。

就是我们不能在外界使用  点+字段  的方式来访问或者修改该字段了。

  我们可以通过自己改写scala的getter和setter来完成对私有变量的访问和修改,如上述。

■ 如果字段是val,则只有getter方法被生成

  当我们需要getter和setter的时候,可以定义变量为var

  当我们只需要getter不需要setter的时候,我们可以定义变量为val

■ 如果你不需要任何getter或setter,可以将字段声明为private[this]

我们要么在对私有变量设置访问方法的时候

要么加上getter方法(对val字段而言)要么加上getter和setter方法(对var字段而言)

但在Scala中,你不能实现只写属性,即带有setter但不带getter的属性。

【scala】getter和setter的更多相关文章

  1. scala getter and setter

    package exp { object Main { def main(args: Array[String]): Unit = { B.name ="Fred"; printl ...

  2. 快学Scala 第六课 (类getter和setter)

    类getter和setter 如果字段定义是private[this], 字段是私有的,但不生成getter和setter方法. class Counter { private[this] var v ...

  3. 基于 getter 和 setter 撸一个简易的MVVM

    Angular 和 Vue 在对Angular的学习中,了解到AngularJS 的两个主要缺点: 对于每一次界面时间,Ajax 或者 timeout,都会进行一个脏检查,而每一次脏检查又会在内部循环 ...

  4. 由Vue引发的getter和setter思考

    公司的新项目决定使用Vue.js来做,当我打印出Vue实例下的data对象里的属性时,发现了一个有趣的事情: 它的每个属性都有两个相对应的get和set方法,我觉的这是多此一举的,于是去网上查了查Vu ...

  5. 为什么要设置getter和setter?

    面向对象语言中,通常把属性设置为私有,然后添加getter和setter方法来访问.有人说,这本质上和设置属性为公有没有区别,干脆把属性public算了.也有人反驳,这样做破坏了封装.但是,破坏了封装 ...

  6. javascript权威指南笔记--javascript语言核心(五)--getter和setter属性

    getter和setter属性: var p = { x:1.0, y:1.0, get r(){ return Math.sqrt(this.x*this.x + this.y * this.y); ...

  7. [图解教程]Eclipse不可不知的用法之一:自动生成Getter、Setter和构造方法

    [图解教程]Eclipse不可不知的用法之一:自动生成Getter.Setter和构造方法 关键词:Getters and Setters.getter和setter方法.Constructor us ...

  8. 属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter

    属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter 一.普通的get 和set 属性. 一般的get 和set 属 ...

  9. Vue引发的getter和setter

    Vue引发的getter和setter 公司的新项目决定使用Vue.js来做,当我打印出Vue实例下的data对象里的属性时,发现了一个有趣的事情: 它的每个属性都有两个相对应的get和set方法,我 ...

随机推荐

  1. Ubuntu 16.04安装JDK并配置环境变量(转发:https://blog.csdn.net/yan3013216087/article/details/78307258)

    系统版本:Ubuntu 16.04 JDK版本:jdk1.8.0_121 1.官网下载JDK文件jdk-8u121-linux-x64.tar.gz 我这里下的是最新版,其他版本也可以 2.创建一个目 ...

  2. Mongo 查询

    Mongo 查询   mongo js 遍历 db.getCollection('CPU').find({}).limit(100).sort({"time":-1}).forEa ...

  3. day3-set集合

    set是一个无序且不重复的元素集合 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 ...

  4. Node.js API学习笔记(一)

    此文章已经发表于本人博客. Terminal(终端) 说起这个使用过linux系统的兄台一般都会知道的,本人理解:类似Putty这些ssh工具通过 软件来实现远程控制主机,对于我们使用者来说,它会显示 ...

  5. js获取iframe和父级之间元素,方法、属,获取iframe的高度自适应iframe高度

    摘自:http://blog.csdn.net/kongjiea/article/details/38870399 1.在父页面 获取iframe子页面的元素 (在同域的情况下 且在http://下测 ...

  6. 笔记2:Jmeter核心组件

    资料来源:开源优测 微信公众号,作者:苦叶子 Jmeter核心组件 1.Thread Group(线程组) 2.逻辑控制器,配置元件,定时器,前置处理器,Sample,后置处理器,断言,监听器: 3. ...

  7. 【leetcode刷题笔记】Rotate Image

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  8. 正则表达式:Python3中的应用简介

    正则表达式:Python3中的应用简介 一.正则表达式 1,概述 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学 ...

  9. dubbo应用

    一.安装配置 cd /usr/local/ wget http://www.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar. ...

  10. APPIUM API整理(python)---操作类

    前言:android手机大家都很熟悉,操作有按键.触摸.点击.滑动等,各种操作方法可以通过api的方法来实现. 参考博文:http://blog.csdn.net/bear_w/article/det ...