gpt4 book ai didi

java - toArray() 函数如何确保 long 类型列表不能转换为 Integer 数组

转载 作者:行者123 更新时间:2023-12-02 01:29:15 27 4
gpt4 key购买 nike

    public <T> T[] toArray(T[] a) {
int size = size();
if (a.length < size)
return Arrays.copyOf(this.a, size,
(Class<? extends T[]>) a.getClass());
System.arraycopy(this.a, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}

public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
@SuppressWarnings("unchecked")
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}

不明白为什么函数 copyOf() 的第三个参数类型是 Class<? extends T[]>而不仅仅是Class<T[]> 。他们之间有什么区别。此约束是否确保一种类型的列表无法转换为其他类型的数组。

最佳答案

通配符允许您传递非文字类。

例如:

copyOf(new String[0], 0, String[].class);
copyOf(new String[0], 0, new String[0].getClass());

当第三个参数类型为 Class<? extends T[]> 时,这两者都有效。 ;但只有第一个对 Class<T[]> 有效.

Ideone demo

实际上,这意味着您可以调用copyOf对于编译时你不知道的类型;相反,您是从现有数组中获取该类。

关于java - toArray() 函数如何确保 long 类型列表不能转换为 Integer 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56383937/

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