我知道,在java中傳遞對象時,對象的引用作爲值傳遞。所以你對這個對象所做的任何改變都反映在原始對象中。爲了避免這種情況,我們在java中使用了不變性屬性。java中的不變性屬性
所以我的問題是,我已經創建了一個不變類Employee
,當我通過這個Employee
類在其他類中的一些方法的對象,我不希望這樣的方法來對這個對象的任何變化。即使如此,我也不希望這些更改受到調用類中創建的原始對象的影響。
這是我的示例代碼。
public final class Employee {
int employeeId;
public int getId() {
return employeeId;
}
public void setId(int id) {
this.employeeId = id;
}
}
public class Worker {
public static void process(Employee f, Employee g){
int c = f.getId();
f.setId(g.getId());
g.setId(c);
}
}
public class ImmutabilityTest{
public static void main(String[] args) {
Employee teamMember = new Employee();
Employee teamLead = new Employee();
teamMember.setId(5);
teamLead.setId(10);
System.out.println("Before process "+teamMember.getId() + " " + teamLead.getId());
Worker.process(teamMember, teamLead);
System.out.println("After process "+teamMember.getId() + " " + teamLead.getId());
}
}
輸出將是
Before process 5 10
After process 10 5
有什麼辦法,以避免在Employee類的成員變量的值的變化? (除了讓他們final
)如果不是那麼我們如何實際利用不變性在用戶定義的類中的Java屬性?
任何建議/意見/指針表示讚賞!謝謝..
感謝您的洞察.. – Rakesh 2012-03-21 06:16:59