scala.1 getter/setter

1.说明

scala 没有修饰符的方法或者是属性 默认是public的

  • scala 的get/set 方法是自动生成的
  • var修饰的变量会生成get/set方法
  • val修饰的变量只生成get方法不生成set方法
  • 对于private修饰的 变量,scala生成的get/set 也是私有的

2.若要想访问私有的变量,必须重新定义get/set

class obb() {

  private[this] var mprivateAge: Int = 0

   def privateAge: Int ={
     println("调用了get")
     this.mprivateAge
   }

   def privateAge_=(value: Int): Unit = {
     print("调用了set")
    this.mprivateAge = value
  }
}

object obb {
  def main(args: Array[String]): Unit = {
    val o= new obb()
    println(o.privateAge)  //实际上调用的是方法
    o.privateAge = 99
    print(o.privateAge) //实际上调用的是方法
  }

观察上面的结果和代码,你会发现这种写法其实完全隐藏了内部的属性 mprivateAge,.
无论是访问还是赋值都用的privateAge这个名字, 看起来就像privateAge才是属性一样,其实不然,privateAge是方法.

3.注解生成(scala/java 双版本)的 set/get


import scala.beans.BeanProperty

class obb() {
  @BeanProperty var mprivateAge: Int = 0
}

object obb {
  def main(args: Array[String]): Unit = {
    val o= new obb()
    println(o.getMprivateAge)
    o.setMprivateAge(99) 
    print(o.getMprivateAge)



  }

@BeanProperty 这个注解会为我们生成java格式的set/get方法和scala格式的get/set 方法, 并且将该字段属性标记为private字段,这也是一种很好的方式,推荐使用

4.IDEA 快捷键生成scala样式的get/set

Alt+Insert
在这里插入图片描述

class obb() {

  private[this] var _privateAge: Int = 0

   def privateAge: Int = _privateAge

   def privateAge_=(value: Int): Unit = {
    _privateAge = value
  }
}
object obb {
  def main(args: Array[String]): Unit = {
    val o= new obb()
    println(o.privateAge)
    o.privateAge = 99
    print(o.privateAge)
  }

这种方式其实和第一种是一样的,不过省事了,不需要字节写代码,idea会自动帮我们生成.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我先森

鼓励一个吧,哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值