小编Jes*_*say的帖子

是否有充分的理由将 OpenJDK 代码中的以下 ArrayList 构造函数分为两种不同的情况?

例如,在 JDK17 中阅读 ArrayList 类的 OpenJDK 代码时

https://github.com/openjdk/jdk17/blob/master/src/java.base/share/classes/java/util/ArrayList.java

我偶然发现了以下构造函数:

public ArrayList(Collection<? extends E> c) {
    Object[] a = c.toArray();
    if ((size = a.length) != 0) {
        if (c.getClass() == ArrayList.class) {
            elementData = a;
        } else {
            elementData = Arrays.copyOf(a, size, Object[].class);
        }
    } else {
        // replace with empty array.
        elementData = EMPTY_ELEMENTDATA;
    }
}
Run Code Online (Sandbox Code Playgroud)

c.getClass()区分是或不是的原因是什么ArrayList.class?这个案子有必要分拆吗?

(我只是想理解 OpenJDK 类 ArrayList 发行版中的 Java 代码。)

java reflection constructor arraylist java-17

12
推荐指数
2
解决办法
290
查看次数

标签 统计

arraylist ×1

constructor ×1

java ×1

java-17 ×1

reflection ×1