Как создать неизменяемый класс в java. , если класс ученика имеет отношение (адрес), как создать неизменяемый класс. Я хочу сделать класс ниже неизменногоКак создать неизменяемый класс в java
final public class Student {
private final Address add;
private final int sid;
public Student(int sid, String name, Address add) {
super();
this.sid = sid;
this.name = name;
this.add = add;
}
private final String name;
public int getSid() {
return sid;
}
public final String getName() {
return name;
}
@Override
public String toString() {
return "Student [add=" + add + ", name=" + name + ", sid=" + sid + "]";
}
public Address getAdd() {
return add;
}
}
//I want to make the class below immutable
public class Address {
public int getAid() {
return aid;
}
public String getStreet() {
return street;
}
@Override
public String toString() {
return "Address [aid=" + aid + ", street=" + street + "]";
}
int aid;
String street;
public Address(int aid, String street) {
super();
this.aid = aid;
this.street = street;
}
}
public class First {
public static void main(String[] args) {
Address myAdd=new Address(179,"Maihill");
Student st=new Student(99,"anoj",myAdd);
System.out.println(st.toString());
myAdd.aid=2376;
System.out.println(st);
System.out.println("***************");
Address pAdd=st.getAdd();
//Here modified address instance then how we can make immutable.
pAdd.aid=788;
System.out.println(st);
}
}
Здесь мы можем modifiy экземпляры адреса. Пожалуйста, дайте мне идею
все поля являются частными и окончательными. Нет метода setter. – user2832497
. Определение класса адреса должно также соответствовать приведенным выше правилам. –
Третья пуля должна быть обобщена на: «никогда не возвращать какое-либо изменяемое поле, всегда возвращайте либо копию (если необходимо, глубоко), либо неизменяемую версию поля». –