重点:
(1)函数式编程建议的是:对象的状态在发生变化是创建一个新的对象,而不是修改现有对象的内部状态,这样有利于并发安全
(2)在scala中一切都是对象,就我们看到的+,-,×,%都是对象
Java中类的定义:
public class JavaPerson { public JavaPerson(String firstName, String lastName, int age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } public String getFirstName() { return this.firstName; } public void setFirstName(String value) { this.firstName = value; } public String getLastName() { return this.lastName; } public void setLastName(String value) { this.lastName = value; } public int getAge() { return this.age; } public void setAge(int value) { this.age = value; } public String toString() { return "[Person: firstName" + firstName + " lastName:" + lastName + " age:" + age + " ]"; } private String firstName; private String lastName; private int age; }
scala中类的定义:
class Person(var firstName:String, var lastName:String, var age:Int) { def getFirstName = firstName def getLastName = lastName def getAge = age def setFirstName(value:String):Unit = firstName = value def setLastName(value:String) = lastName = value def setAge(value:Int) = age = value override def toString = "[Person firstName:" + firstName + " lastName:" + lastName + " age:" + age + " ]" }
注意,构造函数参数引入了 var
关键字。简单来说, var
告诉编译器这个值是可变的。因此,Scala
同时生成 accessor( String firstName(void)
)和
mutator(void firstName_$eq(String)
)方法。然后,就可以方便地创建 setFoo
属性
mutator 方法,它在幕后使用生成的 mutator 方法。