创建一个Java的不可变对象,需要经过以下步骤:
1. 声明类为final
为了防止子类继承和重写类中的方法,将类声明为final。
2. 声明所有的属性为私有的final类型
使用final类型声明属性,并且将其设为私有属性,这样无法修改。
public final class ImmutableObject {
private final int age;
private final String name;
// 构造函数中初始化成员变量
public ImmutableObject(int age, String name) {
this.age = age;
this.name = name;
}
// 对外提供成员变量的访问方法
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
3. 不提供修改属性的方法
由于属性已经被设为final类型,无法修改,因此也不需要提供修改属性的方法。
4. 实现一个共有的构造函数
构造函数中初始化成员变量。
5. 重写equals()方法和hashCode()方法
由于不可变对象需要作为Map、Set等集合的键或值使用,因此需要重写equals()和hashCode()方法以保证对象的比较和哈希值的计算。
示例说明
示例一:使用不可变对象作为集合的键
public static void main(String[] args) {
Map<ImmutableObject, String> map = new HashMap<ImmutableObject, String>();
ImmutableObject obj1 = new ImmutableObject(25, "Tom");
ImmutableObject obj2 = new ImmutableObject(30, "Jerry");
map.put(obj1, "Tommy");
map.put(obj2, "Jerry");
System.out.println(map.get(obj1));
System.out.println(map.get(obj2));
}
运行结果:
Tommy
Jerry
示例二:使用不可变对象作为线程安全的方法参数
public class ThreadSafeMethod {
public static void print(ImmutableObject obj) {
System.out.println(obj.getAge() + " : " + obj.getName());
}
}
public static void main(String[] args) {
ImmutableObject obj1 = new ImmutableObject(28, "Mike");
ImmutableObject obj2 = new ImmutableObject(32, "Sara");
ThreadSafeMethod.print(obj1);
ThreadSafeMethod.print(obj2);
}
运行结果:
28 : Mike
32 : Sara
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:创建一个Java的不可变对象 - Python技术站