java - 在java中向下转换数组(删除未经检查的警告游戏)

标签 java arrays generics

我有一个愚蠢的问题,但有时你还是不得不问他们。

我的左手有一个 Object[] 实例(它来自非泛型 swing),右手有一个接受 Integer[] 作为参数的方法(在我的例子中它实际上是一个可变参数) .我确定数组的内容(或者如果我错了,我准备好付出代价)。

基本上我是这么写的:

private static <U, T extends U> T[] cast(final U[] input, final Class<T> newType) {
    //noinspection unchecked
    final T[] result = (T[]) Array.newInstance(newType, input.length);
    System.arraycopy(input, 0, result, 0, input.length);
    return result;
}

你能在不拔掉它的情况下删除未经检查的警告吗?

为什么 Array.newInstance() 没有被通用化?

最佳答案

why haven't Array.newInstance() been genericized ?

这可能与仅针对引用类型实现的泛型有关。 Array.newInstance( int.class, 42 )完全合法,Class<int>不是。有了这个限制,就没有一种向后兼容的方式让它成为通用类型。

java.util.Arrays类通过为每个原始类型提供多个重载来解决这个问题。所以这有效:

private static <U, T extends U> T[] cast ( final U[] input, final T[]  prototype ) {
    final T[] result = Arrays.copyOf ( prototype, input.length );
    System.arraycopy(input, 0, result, 0, input.length);
    return result;
}

如果您不介意传入一个空数组而不是类对象,它可以避免强制转换。

关于java - 在java中向下转换数组(删除未经检查的警告游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1500044/

相关文章:

r - 在 R 中使用 for 循环将多个图像(3D 数组)存储到 4D 数组中

Javascript - 如何在表单上方显示数组的值?

android - 如何使用 Gson 解析 JSON 对象中的多个 JSON 数组?

c# - 内置类型的通用 EventArgs

C# 是否可以创建可选的泛型类型约束

Java在mailgun中发送多个文件附件

java - 通过 Jackson 反序列化通用对象时出错

c++ - 模板、通用容器和唯一容器,C++

java - contains() 不起作用,但 getAbsolutePath() 起作用

通过 Dijkstra 算法从每个节点作为源计算到所有节点的最短路径时,Java 内存不足堆错误