提交 a08bace3 编写于 作者: S sjsdfg

fix typo close #45

上级 06362dd1
......@@ -42,7 +42,7 @@ s.addAll(List.of("Snap", "Crackle", "Pop"));
  我们可以通过消除 `addAll` 方法的重写来“修复”子类。 尽管生成的类可以正常工作,但是它依赖于它的正确方法,因为 `HashSet``addAll` 方法是在其 `add` 方法之上实现的。 这个“自我使用(self-use)”是一个实现细节,并不保证在 `Java` 平台的所有实现中都可以适用,并且可以随发布版本而变化。 因此,产生的 `InstrumentedHashSet` 类是脆弱的。
  稍微好一点的做法是,重写 `addAll` 方法遍历指定集合,为每个元素调用 `add` 方法一次。 不管 `HashSet``addAll` 方法是否在其 `add` 方法上实现,都会保证正确的结果,因为 `HashSet``addAll` 实现将不再被调用。然而,这种技术并不能解决所有的问题。 这相当于重新实现了父类方法,这样的方法可能不能确定到底是否时自用(self-use)的,实现起来也是困难的,耗时的,容易出错的,并且可能会降低性能。 此外,这种方式并不能总是奏效,因为子类无法访问一些私有属性,所以有些方法就无法实现。
  稍微好一点的做法是,重写 `addAll` 方法遍历指定集合,为每个元素调用 `add` 方法一次。 不管 `HashSet``addAll` 方法是否在其 `add` 方法上实现,都会保证正确的结果,因为 `HashSet``addAll` 实现将不再被调用。然而,这种技术并不能解决所有的问题。 这相当于重新实现了父类方法,这样的方法可能不能确定是否是自用(self-use)的,实现起来也是困难的,耗时的,容易出错的,并且可能会降低性能。 此外,这种方式并不能总是奏效,因为子类无法访问一些私有属性,所以有些方法就无法实现。
  导致子类脆弱的一个相关原因是,它们的父类在后续的发布版本中可以添加新的方法。假设一个程序的安全性依赖于这样一个事实:所有被插入到集中的元素都满足一个先决条件。可以通过对集合进行子类化,然后并重写所有添加元素的方法,以确保在添加每个元素之前满足这个先决条件,来确保这一问题。如果在后续的版本中,父类没有新增添加元素的方法,那么这样做没有问题。但是,一旦父类增加了这样的新方法,则很有可能由于调用了未被重写的新方法,将非法的元素添加到子类的实例中。这不是个纯粹的理论问题。在把 `Hashtable``Vector` 类加入到 `Collections` 框架中的时候,就修复了几个类似性质的安全漏洞。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册