تفاوت object تغییرپذیر (mutable) و تغییرناپذیر (immutable) در جاوا
در این آموزش از کتاب برخط جاوا، تفاوت بین شیء (object) های mutable و immutable نشان داده می شود.
1. Mutable Objects: شما می توانید وضعیت و فیلدهای شیء یا object را بعد از ایجاد شدن تغییر دهید. برای مثال: StringBuilder ،java.util.Date و غیره.
2. Immutable Object: شما نمی توانید هیچ چیزی را بعد از ایجاد شدن object تغییر دهید. برای مثال: String ،Integer ،Long و غیره.
مثال Mutable جاوا
به طور معمول، متدی برای ویرایش مقدار فیلد در خود دارد، و object می تواند گسترش پیدا کند.
package org.amoozesh;
public class MutableExample {
private String name;
MutableClass(String name) {
this.name = name;
}
public String getName() {
return name;
}
// this setter can modify the name
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
MutableExample obj = new MutableExample("oruji");
System.out.println(obj.getName());
// update the name, this object is mutable
obj.setName("new oruji");
System.out.println(obj.getName());
}
}
خروجی برنامه
oruji
new oruji
مثال Immutable جاوا
برای ایجاد یک object تغییر ناپدیر (immutable)، کلاس را به صورت final تعریف کرده، و هیچ متدی برای ویرایش فیلدها ایجاد نکنید.
package org.amoozesh;
// make this class final, no one can extend this class
public final class ImmutableExample {
private String name;
ImmutableExample (String name) {
this.name = name;
}
public String getName() {
return name;
}
//no setter
public static void main(String[] args) {
ImmutableExample obj = new ImmutableExample("oruji");
System.out.println(obj.getName());
// there is no way to update the name after the object is created.
// obj.setName("new oruji");
// System.out.println(obj.getName());
}
}
خروجی برنامه
oruji
نکته
object تغییر ناپذیر (Immutable) ساده، thread-safe (بدون نیاز به synchronization)، بسیار کم مستعد خطا و امن تر است. در صورت امکان، تمامی object ها را immutable ایجاد کنید.