本文主要是介绍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方法,分别叫做field 和 field_,但是实际上还是class_obj.field = XXX这种赋值操作
package com1/*** @author yangxin_ryan*/
class Student {var name = "leo"}object Student {def main(args: Array[String]): Unit = {val leo = new Studentprintln(leo.name)leo.name = "iiii"println(leo.name)}}
-
如果只希望有简单的getter和setter方法,那么就按照scala提供的语法规则,根据需求为field选择合适的修饰符就好:var、val、private、private[this];
-
但是如果希望能够自己对getter和setter进行控制,则可以自定义getter与setter方法;
-
自定义setter方法的是欧一定要注意scala的语法限制,签名、=、参数间不能有空格
package com1/*** @author yangxin_ryan*/
class Student1 {private var myName = "leo"def name = "your name is " + myNamedef name_=(newValue: String) {println("you cannot edit your name!!!")}
}object Student1{def main(args: Array[String]): Unit = {val leo = new Studentprintln(leo.name)leo.name="leo1"}
}
-
如果你不希望field有setter方法,则可以定义为val,但是此时再也不能更改field的值了;
-
但是如果希望能够仅仅暴漏一个getter方法,并且还能通过某些方法更改field的值,那么需要综合使用private以及自定义getter方法;
-
此时,由于field是private的,所以setter和getter都是private,对外界没有暴漏;
-
自己可以实现修改field值的方法;自己也可以覆盖getter方法;
package com1/*** @author yangxin_ryan*/
class Student2 {private var myName = "leo"def updateName(newName: String): Unit = {if (newName == "leo1")myName = newNameelseprintln("not accept this new name!!!")}def name = "your name is " + myName}object Student2{def main(args: Array[String]): Unit = {val leo = new Student2println(leo.myName)leo.updateName("leo2")leo.updateName("leo1")println(leo.name)}}
这篇关于Scala学习笔记 --- getter与setter方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!