我有一个愚蠢的问题,但有时你还是不得不问他们。
我的左手有一个 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/