Scala入门-封装


提供 get 方法

def  setXxx(参数名 : 类型) : Unit = {
        //加入数据验证的业务逻辑
        属性 = 参数名
    }

提供 set 方法

def getXxx() [: 返回类型] = {
    return 属性
    }

看一个具体的例子:

object StuffDemo {
  def main(args: Array[String]): Unit = {
    val stuff = new Stuff(sex = 'M')
    println(stuff) // Stuff(2000.0, 18, M)

    stuff.setAge(24)
    println(stuff) // Stuff(2000.0, 24, M)

    stuff.setAge(190)
    println(stuff) // Stuff(2000.0, 24, M)
  }

}

/**
  * 可以在主构造器中定义属性的默认值,甚至是设置属性的访问权限,但是失去了对属性的控制(解决方式是可以在调用构造方法前对设置的属性进行验证)
  *
  * @param salary
  * @param age
  * @param sex
  */
class Stuff(private var salary: Double = 2000, val sex: Char) {
  private var age: Int = 18

  def setAge(age: Int): Unit = {
    if (age >= 0 && age <= 120) {
      this.age = age
    }
  }

  override def toString = s"Stuff($salary, $age, $sex)"
}

注意事项:

Scala 中为了简化代码的开发,在类中声明属性时,自动提供对应的 setter、getter 方法。

如果属性声明省略访问权限(编译器会自动为其加上 public 访问权限),对应 setter/getter 方法的访问权限是 public。

如果属性访问权限声明为 private,对应 setter/getter 方法的访问权限是 private。

所以,如果仅仅只是对一个属性进行简单的 set 和 get,只需要声明该属性即可;访问属性直接使用 对象.属性 即可(实质上是调用编译器自动生成的 getter 方法);设置属性直接使用 对象.属性=xxx 即可(实质上是调用编译器自动生成的 setter 方法)。


文章作者: Tianny
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Tianny !
评论
 上一篇
Scala入门-继承 Scala入门-继承
继承Scala 只支持单继承,这点和 Java 一样。 object ExtendDemo extends App { val stu = new Stu stu.name = "cris" stu.age = 23 st
2020-03-20
下一篇 
Scala入门-包 Scala入门-包
Scala 的包机制,在 Java 基础之上更加的灵活。 包路径Scala 中包名和源码所在的系统文件目录结构要可以不一致(Java 中强制要求一致),但是编译后的字节码文件路径和包路径会保持一致(编译器自动完成)。 系统目录结构如下:
2020-03-19
  目录