【发布时间】:2014-03-29 18:50:56
【问题描述】:
我试图理解 Java8 中的 Streams 并且间歇性地在 Java8 的源代码中偶然发现了一个有趣的东西:ArrayList 似乎被实现了两次:
显而易见的:
java.util.ArrayList不明显的:
java.util.Arrays.ArrayList,这是一个私有类。
一个奇怪的区别是普通版本更大,并实现List<E>,而Arrays.ArrayList 没有(直接)这样做。
为什么要定义两次?为什么要同名?
【问题讨论】:
-
这在 Java 8 中并不新鲜 - 另请参阅:stackoverflow.com/questions/4792160/arrays-aslist-doubt/…
-
这些类碰巧共享相同的名称,但不应该扮演相同的角色。
private类是Arrays内部的一个实现细节,它提供了一个数组的List视图。它可能被称为ArrayViewList或其他名称,也许它有助于理解假装它。