java - toArray() 函数如何确保 long 类型的列表不能转换为 Integer 的数组
问题描述
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[]>
.
实际上,这意味着您可以copyOf
在编译时调用您不知道的类型;相反,您正在从现有数组中获取类。
推荐阅读
- flutter - Flutter:如何在某个事件上重建应用程序
- c# - Dotnet Graphql 响应反序列化
- yaml - 为什么不自定义已经访问过的节点
- python-3.x - 通过显示未包含的列进行分组
- python - 返回python中某个限制和另一个变量之间的最大值
- flutter - 如何从 VSCode 中删除克隆的 GitHub 存储库?
- laravel - Laravel 嵌套跨数据库关系
- python - 带有导入类方法的 Python 类型提示
- php - 为什么我无法在 mysqli PHP 中返回错误
- c# - 如何根据 ASP.NET Core MVC 中用户表中的字段添加声明?