Знам, че когато става въпрос за предаване на обекти в java, референцията на обекта се предава като стойност. Така че всички промени, които правите в този обект, се отразяват и в оригиналния обект. За да избегнем това, ние използваме свойството immutability в 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
) Ако не, тогава как всъщност използваме свойството Immutability в java в дефиниран от потребителя клас?
Всички предложения/мнения/насоки се оценяват! Благодаря..