gpt4 book ai didi

java - 为什么标准 java 类的 clone() 返回对象而不是实际类型

转载 作者:太空狗 更新时间:2023-10-29 22:45:57 24 4
gpt4 key购买 nike

java中允许指定函数返回类型,例如下面的代码

public class Test {

static class Dad {
Dad me() {
return this;
}
}

static class Son extends Dad {
Son me() {
return this;
}
}
}

有效。

让我们看看ArrayList类(class)。它已覆盖 clone()函数(至少我在Oracle jdk 1.7源码中看到了)

public Object clone() {
try {
@SuppressWarnings("unchecked")
ArrayList<E> v = (ArrayList<E>) super.clone();
v.elementData = Arrays.copyOf(elementData, size);
v.modCount = 0;
return v;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}

不返回有什么意义ArrayList<E>但只是Object

最佳答案

向后兼容性。

在 Java 5 之前,重写时无法缩小返回类型,因此 ArrayList.clone()被宣布返回Object .现在语言允许,他们不能使用它,因为缩小了 ArrayList.clone() 的返回类型。会破坏 ArrayList 的现有子类,这些子类覆盖了 ArrayList.clone()返回类型 Object .

关于java - 为什么标准 java 类的 clone() 返回对象而不是实际类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17509659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com