scala中的getter和setter

Scala类参数的setter和getter编程 除了使用自动生成的setter和getter方法,我们还可以自定义这些方法的实现。这样,我们可以在设置和获取属性值时添加一些额外的逻辑。// 在设置属性值之前进行一些额外的逻辑_name// 在设置属性值之前进行一些额外的逻辑 println(s "Changing name from $ _name to $ newName ") _name = newName } def age : Int = _age def age_ =(newAge : Int) : Unit = { 阅读详情

我们在用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的属性

1、编译后,隐式生成getter、setter方法

对于scala类中的每一个属性,编译后
会有一个私有的字段和相应的getter、setter方法生成
编译后,会隐式的创建 get 、set 方法,是隐士的,看不到的

//getter
println(dog leg)
//setter
dog.leg_=(10)

提示:“leg_=” 是setter 的方法名

2、自定义 getter、setter

当然了,你也可以不使用自动生成的方式,自己定义getter和setter方法

class Dog2 {

  private var _leg = 4

  def leg = _leg

  def leg_=(newLeg:Int)={
    _leg=newLeg
  }

  def shout(content:String): Unit ={
    println(content)
  }
}

提示:自己定义的时候,尽量符合Scala的规范,这是一个规则,我们知道就行了,一般不会这个做
手动的把属性,添加private,生成的getter和setter方法,也是private的,不写private,默认是private,但是它的getter和setter方法不是private的,是可以访问的

3、调用和注意事项

val dog2 = new Dog2
//getter
dog2.leg_=(10)
//setter
println(dog2.leg)

提示:自己手动创建变量的getter和setter方法需要遵循以下原则
(1)字段属性名以“_”作为前缀,如:_leg
(2)getter方法定义为:def leg = leg
(3)setter方法定义时,方法名为属性名去掉前缀,并加上后缀,后缀是:“leg=”,如例子所示
(4)Scala 是可以生成Java 风格的getXX 和setXXX 方法的,可以使Scala 与Java 实现相互操作

总结一下,在实现属性是,可以有四个选择
(1)var foo: Scala 自动合成一个getter方法和一个setter方法
(2)val foo: Scala 自动合成一个getter方法
(3)由你自己来定义foo 和 foo_= 方法
(4)由你自己来定义foo方法

参考:
https://www.jianshu.com/p/ad624c47257b
https://www.cnblogs.com/zzhangyuhang/p/8921737.html

scala类参数 setter getter 样例类 scala帮你写了getter setter 普通类 package com.yy.traitLearn class Person(val xname:String,xage:Int,var sex:String) object classArg { def main(args: Array[String]): Unit = { val p = new Person("xiaoming",11,"man") // gette... 阅读详情

相关推荐

利用 Docker Distribution 搭建私有的 Docker Registry

1、拓扑

weixin_44983653的博客 1067

【scala】getter和setter

类的基本内容要点: 0、scala不允许重写(覆盖)getter,setter方法1、scala在定义字段时使用var ,默认生成对应setter和getter方法 2、调用了scala的setter方法 对应的方法名称money_=(或即value_$eq) 3、调用了scala的gettter方法 对应的方法名称就为字段名称money 4、当使用val定义字段时,scala不在提供...

wz_TXWY的博客 960

告别Modern Standby!Win10/11强制S3睡眠的终极指南(含BIOS设置避坑)

本文是针对Windows 10/11用户因Modern Standby(S0低电量待机)导致睡眠耗电、发热问题的终极解决方案。文章详细对比了Modern Standby与传统S3睡眠(Suspend to RAM)的本质区别,并提供了从系统诊断、注册表修改、BIOS/UEFI设置避坑到驱动优化的完整步骤,旨在帮助用户强制启用稳定、省电的S3睡眠模式,彻底告别睡眠噩梦。

n7o8p的博客 802

Scala——(类和无参构造器,自定义getter和setter方法,Bean属性,构造器,对象)

对于 Scala 类中的每一个属性,编译后会有一个私有的字段和相应的getter、setter方法生成。//getter方法 println(person age) //setter方法 person age_ =(18) //getter方法 println(person . age)字段属性名以“_”作为前缀,如: _leggetter方法定义为:def leg = _legsetter方法定义为:def leg_=(newLeg: Int)

qq_43408367的博客 685

避坑指南:STM32定时器测PWM频率占空比时,那些CubeMX没告诉你的细节(蓝桥杯真题衍生)

本文深入解析STM32定时器测量PWM频率和占空比时的关键细节,揭示CubeMX配置中未明确的时钟树原理和输入捕获机制。针对蓝桥杯嵌入式赛题中的常见问题,提供动态调整预分频器、多采样数字滤波等实战解决方案,帮助开发者避免测量误差,提升PWM测量精度和稳定性。

weixin_28692153的博客 339

OpenGL ES 3.0 开发(一):绘制一个三角形

该原创文章首发于微信公众号:字节流动 什么是 OpenGLES OpenGLES 全称 OpenGL for Embedded Systems ,是三维图形应用程序接口 OpenGL 的子集,本质上是一个跨编程语言、跨平台的编程接口规范,主要应用于嵌入式设备,如手机、平板等。由科纳斯(Khronos)组织定义和推广,科纳斯是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。 O...

字节流动 8万+

Scala中的Getter和Setters

Getter and Setters in Scala are methods that are used to access and instantiate a variable of a class or trait in Scala. These methods have similar functioning as in Java. Scala中的Getter和Setter是用于访问和实...

cumtv80668的专栏 616

【GPFS专题4】---IBM Spectrum Scale (GPFS) 原理详解

IBM Spectrum Scale(原名为 GPFS,General Parallel File System)是一种高性能、分布式的集群文件系统,专为大规模数据共享和并行访问设计。它允许多个客户端同时访问共享文件,提供高可用性、容错性和扩展性,广泛应用于高性能计算(HPC)、大数据分析、AI 训练和企业级存储场景。IBM Spectrum Scale 通过分布式架构、并行访问和智能数据管理,为企业提供了高性能、高可用、可扩展的存储解决方案。

jundao1997的专栏 780

Scala的getter、setter方法以及构造方法

scala 为每一个私有变量提供了getter、setter方法,不用显性的定义: 下面是几种方式: package scalaLearn class Counter { private var mycount = 10 // 默认提供了 getter和 setter方法 private var myname = "Scala" // 实际上他自动实现了getter setter方...

liuhehe123的博客 703

MIKE水动力笔记2_水动力基础理论知识

本文所讲内容是水动力基础理论知识,所参考的主要书籍是《水动力学和水质》(第二版,季振刚著,海洋出版社)。

晏长街的博客 1万+

雷达工程师面试题目

详细描述项目背景、目标、你的具体职责和贡献,分析在项目实施过程中遇到的主要技术难题及解决方案,总结项目取得的成果和经验教训。

道亦无名 738

scala getter和setter

当类的属性是公共的实时可以通过“对象.属性” 直接调用,当属性是private私有时,则无法直接调用,这时就需要该字段的getter和setter进行访问。 scala中的getter和setter方法是通过value和value_=进行实现的,以下是具体的实现 object GetterSetterTest { def main(args: Array[String]): Unit = {...

zzw_17600691357的博客 558

华为od 面试八股文_测试/测试开发_05_含答案

华为od 面试八股文_测试/测试开发_05_含答案

MISAYAONE的博客 2558

Scala字段自动生成getter和setter并给getter加注解

Scala自动生成getter和setter 使用Scala类,但又要使这个类兼容java的框架如spring boot,需要给类的变量加上java bean风格的getter和setter。 为此可以使用 @BeanProperty注解。例如: import scala.beans.BeanProperty class Person { @BeanProperty var name: String = _ } 此注解对 val 和 var 都有效。对于 val 程序只生成 getter,而对 va

robinz1001的博客 866

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

黑猴子的家:Scala Getter 和 Setter 方法

1、编译后,隐士生成getter、setter方法 对于scala类中的每一个属性,编译后 会有一个私有的字段和相应的getter、setter方法生成 编译后,会隐士的创建 get 、set 方法,是隐士的,看不到的 //getter println(dog leg) //setter dog.leg_=(10) 尖叫提示:“leg_=” 是setter 的方法名 2、自定义 get...

黑猴子的博客 685

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

scala 中的类定义与getter setter

定义一个类,包含field以及方法 calss HelloWorld{ private var name  = "HEL" def sayHello(){print("HEllo,"+name)}   //在类中不叫函数 叫方法 def getName = name } //创建类的对象,并调用其方法 val helloworld =new HelloWorld hello

hujutaoseu的博客 2988

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

scala属性的getter和setter方法

类的基本内容要点: 1、scala在定义字段时使用var ,默认生成对应setter和getter方法 2、调用了scala的setter方法  对应的名称money_= 3、调用了scala的gettter方法  对应的名称就为字段名称money 4、当使用val定义字段时,scala不在提供对应的setter方法 5、如果使用private修饰字段时 scala不在提供对应的sett

qa38113202的博客 3594

Scala之类(getter与setter属性,主构造器和辅助构造器)

scala中的类的特点: 1.类中字段自动实现getter和setter方法 2.可以实现自定义getter和setter方法 3.使用@BeanProperty注解生成getXXX和setXXX方法 4.每个类有一个主构造器,随类定义一起声明,参数可以直接成为类字段,主构造器执行类体中的所有语句。 5.可以拥有任意多的辅助构造器,叫做this。 1.简单类与无参方法 class Person {...

KGC的博客 815

getter mysql_【scala】getter和setter

我们在用Java的时候经常把一些字段定义为private类型来完成封装,这样外界就无法访问。如果外界访问或者修改该字段的时候,只能通过该字段提供的getter和setter方法来实现。在Scala中是没有getter和setter一说的。用了value 和 value_= 来分别代替了getter和setter。下面我们看个例子class Counter{private var privateVa...

weixin_31119637的博客 111

Scala @BeanProperty注解生成getter/setter

学亮编程手记 2301

scala 2.11 版本自动生成setter getter方法

在scala2.10 版本,可以通过导入import scala.reflect.BeanProperty包,在field声明 https://www.scala-lang.org/api/2.11.5/index.html#scala.beans.BeanPropertyThis annotation has the same functionality as scala.beans.BeanP...

不管大小写的博客 2052

Scala学习笔记 --- getter与setter方法

定义不带有priavte的var field, 此时scala生成的面向JVM的类时,会定义为private 的name字段,并提供public的getter和setter方法 如果使用private修饰field,则生成的getter和setter也是private 如果定义val field,则只会生成getter方法 如果不希望生成setter和getter方法,则将field声明为private[this] 调用getter和setter方法,分别叫做fi..

杨鑫newlife的专栏 925

Scala学习--面向对象编程之类的getter和setter方法

Scala中定义类的方法和Java基本相同,但比Java更加的简洁。 我们都知道,类中的field一般被定义为私有的,这样可以达到封装的特性,数据被定义为私有的之后,为了访问到数据,我们要定义get和set方法来使用这些数据,接下来说一下Scala中getter和setter方法的使用。 先看一个定义类的例子: class HelloWorld{ private var name = "xiao...

weixin_43866709的博客 581

Scala - Bean的 getter 与 setter方法

我们在用Java的时候经常把一些字段定义为private类型来完成封装,这样外界就无法访问。 如果外界访问或者修改该字段的时候,只能通过该字段提供的getter和setter方法来实现。 在Scala中是没有getter和setter一说的。 用了value 和 value_= 来分别代替了getter和setter。 下面我们看个例子 class Counter{     priva...

u010476994的博客 2544
上一篇: scala基础教程:《scala 编程(第3版)》学习笔记(全)
下一篇: idea .iml和pom文件 更新
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值