重点:
(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 方法。