第8章 第50条: 必要时进行拷贝性保护 而且

假设类的客户端会尽可能破坏类的约束条件,那就必须竟可能的进行保护性的程序设计。
1.对于构造函数(如果属性被认为是不可变的)的参数需要进行拷贝性保护,且在检查参数有效性之前,有效性检查也是拷贝后的对象。 因为在多线程的情况下,会存在参数有效性检查通过后,参数被其他线程修改,而后修改后的参数被拷贝了。
2.对于参数类型可以被不信任方子类化的参数,请不要使用clone方法进行拷贝。
3.对于访问方法,需要返回 可变内部域的保护性拷贝。
4.使用不可变的对象作为对象内部组件,就不用再操心保护性拷贝的事了。

思考:如果参数来自于不被信任的客户端,那保护性拷贝就很有必要。另外一种情况相对来说在我们系统更可能发生,就是构造方法需要当前对象作为参数传入,但在后续代码中对象被修改了。这种情况在多人修改同一块代码时很容易发生,一旦出现问题,查root cause也十分麻烦。这个时候保护性拷贝就十分必要了。

你可能感兴趣的:(第8章 第50条: 必要时进行拷贝性保护 而且)