想问下 jdk 的 Arrays 工具类的 copyof 方法,不能保证把 original 的元素“扔到”新数组中去啊。 为什么不限定 T 和 U 的关系呢?比如 public static <T,U extends T> T[] copyOf(U[] original, int newLength, Class<T[]> newType)。
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;
}
想听听大佬们的看法。
1
zhaohui318 2018-08-04 10:31:20 +08:00
取舍不同吧
你把 T 和 U 绑定上关系,就失去很多灵活性 |
2
sharkv OP @zhaohui318 看起来是这个样子,但是数组类型没有亲属关系啊,不知道有什么灵活性
|
3
zhaohui318 2018-08-04 10:55:43 +08:00
@sharkv #2
像 spring 用到了很多 反射 和 动态加载,如果把 T 和 U 绑上关系,运行时的类型检查放到了编译期,那这个方法就用不了了 |
4
zjp 2018-08-04 10:57:29 +08:00
Object[] objects = new Object[]{"1", "2"};
String[] copyArray = Arrays.copyOf(objects, 2, String[].class); String[] castArray = (String[]) objects; // ClassCastException 因为哪怕明确知道数组的组件类型可以安全的向下转型也不能对数组转型。如一楼所说,灵活性和静态检查之间的取舍 |
5
verrickt 2018-08-04 11:00:12 +08:00 via Android
不知道 Java 里 primitive type 能不能有数组。如果可以的话,那加了泛型限制后就没法从 byte[]拷贝到 int[]了吧。不是做 Java 的,无条件猜测下。
|