面试题答案
一键面试设计不可变类需遵循的原则:
- 类声明为final:防止该类被继承,避免子类改变其行为。
- 所有成员变量声明为private final:
private
确保成员变量只能在类内部访问,final
保证变量一旦赋值后不能再更改。 - 不提供修改成员变量的方法(setter方法):杜绝外部代码修改对象状态。
- 通过构造函数初始化所有成员变量:确保对象创建时所有状态都已确定。
- 对于可变对象的成员变量,在getter方法中返回其拷贝:防止外部代码通过获取可变对象引用而修改对象内部状态。
自定义不可变类示例:
public final class ImmutableClass {
private final int value;
private final String name;
public ImmutableClass(int value, String name) {
this.value = value;
this.name = name;
}
public int getValue() {
return value;
}
public String getName() {
return name;
}
}
在上述示例中,ImmutableClass
类被声明为final
,成员变量value
和name
被声明为private final
,通过构造函数初始化成员变量,并且没有提供修改成员变量的方法,符合不可变类的设计原则。