Skip to content

Commit af278d4

Browse files
authored
Update 07_How_to_Define_ArrayList.md
1 parent 766e1fc commit af278d4

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

Diff for: ch06/07_How_to_Define_ArrayList.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
有两个地方分配数组的新实例,一个在类的初始化器中,另一个在增加数组容量的方法中(这又从 `add` 方法中调用)。在这两个地方,数组都被分配为一个
1717
`Object []`,并且未勾选的类型转换为 `E []`
1818

19-
包含数组的字段是私人的是非常重要的;否则将违反广告真理原则和不雅暴露原则。这违反了广告中的真理原则,因为 `E` 可能被绑定到 `Object` 以外的类型(如
19+
包含数组的字段是私有的是非常重要的;否则将违反广告真理原则和不雅暴露原则。这违反了广告中的真理原则,因为 `E` 可能被绑定到 `Object` 以外的类型(如
2020
`String`)。这会违反不雅暴露原则,因为 `E` 可能会绑定到不是可保留类型的类型(例如 `List<Integer>`)。但是,这些原则都没有违反,因为该数组并非公开的:
2121
它存储在私人领域,没有指向数组的指针从类中逃脱。我们可以称之为封闭门背后的任何原则。
2222

2323
我们在这里定义 `ArrayList` 的方式接近 `Sun` 发布的源代码中的实际定义。最近,该库的共同作者 `Neal Gafter` 认为他使用了糟糕的风格 - 如果声明私有数组的
2424
类型为 `Object []`,并且在从数组中检索元素时使用强制类型(`E`)会更好。对于这一点,有些话要说,尽管对于我们在这里使用的风格也有一些要说的,这可以最大限
25-
度地减少对未经检查的演员的需求
25+
度地减少对未经检查的实例的需求
2626

2727
`toArray` 的方法确实会公开返回一个数组,但它使用了第 `6.5` 节中所述的技巧,依照广告中的真理原则。和之前一样,有一个参数数组,如果它不足以容纳集合,则使
2828
用反射来分配具有相同指定类型的新数组。这个实现类似于我们前面看到的实现,除了可以使用更高效的 `arraycopy` 例程将私有数组复制到公用数组中以返回。

0 commit comments

Comments
 (0)